Chápu váš problém, ale mám otázky týkající se jeho částí, takže budu trochu obecnější.
- Pokud by to bylo možné, uložil bych skladová/záložní skladová data s vašimi skladovými daty (buď přímo zavěšené na skladech, nebo pokud je to specifické pro produkt mimo inventurní tabulky).
- Pokud je nutné nastavení vypočítat pomocí vaší obchodní logiky, měly by záznamy viset mimo tabulku order/order_item
Pokud jde o implementaci struktury v SQL, budu předpokládat, že všechny objednávky jsou odesílány z jednoho skladu a že zásilka musí být zavěšena mimo tabulku objednávek (ale nápady by měly být použitelné i jinde):
-
Starší způsob, jak vynutit nula/jedna záložní sklady, by bylo zavěsit záznam Warehouse_Source tabulky Orders a zahrnout pole „IsPrimary“ nebo „ShippingPriority“ a poté zahrnout složený jedinečný index, který zahrnuje OrderID a IsPrimary/ShippingPriority.
-
pokud budete mít vždy pouze jeden záložní sklad, můžete do objednávky přidat pole ShippingSource_WareHouseID a ShippingSource_Backup_WareHouseID. I když to není cesta, kterou bych se vydal.
V SQL 2008 a novějších máme skvělý doplněk filtrované indexy . Ty umožňují přidat do indexu klauzuli WHERE – výsledkem je kompaktnější index. Má také další výhodu v tom, že vám umožňuje provádět některé věci, které bylo v minulosti možné provést pouze pomocí spouštěčů.
- Můžete umístit jedinečný filtrovaný index na OrderID &IsPrimary/ShippingPriority (WHERE IsPrimary =0).
Pokud chcete, abych vám to vysvětlil dále, přidejte komentář nebo něco podobného.