Saya memahami masalah Anda, tetapi ada pertanyaan tentang bagian-bagiannya, jadi saya akan menjelaskannya secara lebih umum.
- Jika memungkinkan, saya akan menyimpan data gudang/gudang cadangan dengan data inventaris Anda (baik secara langsung digantung di gudang, atau jika itu adalah produk khusus dari tabel inventaris).
- Jika penyiapan harus dihitung melalui logika bisnis Anda, maka catatan tersebut harus berada di luar tabel order/order_item
Dalam hal bagaimana menerapkan struktur dalam SQL, saya akan berasumsi bahwa semua pesanan dikirim dari satu gudang dan pengiriman harus digantung di tabel pesanan (tetapi idenya harus berlaku di tempat lain):
-
Cara lama untuk menerapkan gudang cadangan nol/satu adalah dengan menggantung catatan Warehouse_Source dari tabel Pesanan dan menyertakan bidang "IsPrimary" atau "ShippingPriority" lalu menyertakan indeks unik gabungan yang mencakup OrderID dan IsPrimary/ShippingPriority.
-
jika Anda hanya akan memiliki satu gudang cadangan, Anda dapat menambahkan bidang ShippingSource_WareHouseID dan ShippingSource_Backup_WareHouseID ke pesanan. Meskipun, ini bukan rute yang akan saya tempuh.
Di SQL 2008 dan lebih tinggi, kami memiliki tambahan yang bagus dari Indeks yang Difilter . Ini memungkinkan Anda untuk menambahkan klausa WHERE ke indeks Anda -- menghasilkan indeks yang lebih ringkas. Ini juga memiliki manfaat tambahan yang memungkinkan Anda untuk mencapai beberapa hal yang hanya dapat dilakukan melalui pemicu di masa lalu.
- Anda dapat menempatkan indeks yang difilter Unik pada OrderID &IsPrimary/ShippingPriority (WHERE IsPrimary =0).
Tambahkan komentar atau semacamnya jika Anda ingin saya menjelaskan lebih lanjut.