sql >> Databáze >  >> RDS >> Sqlserver

Indikace primárního/výchozího záznamu v databázi

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.



  1. Provádění uložené procedury Oracle v rámci EntityFramework

  2. MYSQL count of count?

  3. Tisk na obrazovku v souboru .sql postgres

  4. Caching PDO připravené výkazy