Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Manajemen inventaris dengan opsi saham

Saya pikir model draf (mengikuti 6NF dan 3NF) akan membantu Anda.
Saya menyederhanakan konvensi penamaan dengan menghapus kata kunci 'toko'.
(Juga entitas toko dapat memimpin konsep terpisah AKA SaaS)

Demo SqlFiddle

Tentang pertanyaan di komentar:

Ya, ini adalah pola umum untuk menggunakan pengidentifikasi pengganti di meja Anda. Seperti yang Anda lihat di artikel, itu akan datang dengan pro dan kontra.

Misalnya, dalam pertanyaan, Anda akan melihat kunci utama ProductSpecification tabel adalah komposisi dari ProductTypeOptions , OptionValue dan Product kunci asing.
Sementara itu kunci utama tabel lain seperti OptionValue adalah kunci komposit (OptionId + ValueName )
Sepertinya hidup akan lebih mudah dengan memiliki ID bidang di setiap tabel sebagai kunci utama, ya, tetapi sebagai perancang basis data Anda akan kehilangan sesuatu yang berharga, logika bisnis .

Dalam desain saat ini, Anda dapat memiliki batasan ini di tabel Spesifikasi Produk, batasan ini akan menampilkan bagian dari logika bisnis Anda:

  • Periksa batasan pada ProductSpecification {OptionValue.optionId = productTypeOption.optionId} yang akan mencegah nilai seperti "Putih" ditetapkan ke "Ukuran".
  • Periksa batasan pada ProductSpecification {product.productTypeId = productTypeOption.productTypeId} yang akan mencegah produk seperti"Nike" ditetapkan ke spesifikasi produk "Mobil".

Jika Anda menggunakan pengidentifikasi pengganti, Anda tidak dapat memiliki batasan jenis ini di dalam basis data Anda (coba ini).
Pekerjaan ekstra akan diperlukan untuk dilakukan di dalam implementasi aplikasi Anda untuk mendapatkannya.
BTW gunakan pengenal pengganti, periksa konsistensi data , jika lebih tertarik lihat memilih Kunci Utama:Alami atau Pengganti .

Tampaknya "Sepatu Pria" dari "Nike" perlu memiliki harga, stok, dan biaya tambahan, sehingga itu adalah milik alami Product tabel.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengembangan Rails - Tidak dapat terhubung ke server MySQL di 'localhost' (10061)

  2. Panggilan UPSERT standar SQL

  3. Kode Kesalahan:1290. Server MySQL berjalan dengan opsi --secure-file-priv sehingga tidak dapat menjalankan pernyataan ini

  4. Seperti Case Sensitive di MySQL

  5. Mendapatkan koneksi gagal:php_network_getaddresses:getaddrinfo gagal:Nama atau layanan tidak diketahui