Rozumiem Twój problem, ale mam pytania dotyczące jego części, więc będę nieco bardziej ogólny.
- Jeśli to w ogóle możliwe, chciałbym przechowywać dane magazynu/magazynu zapasowego wraz z danymi magazynowymi (albo bezpośrednio zawieszone magazyny, albo jeśli są one specyficzne dla produktu poza tabelami magazynowymi).
- Jeśli konfiguracja musi być obliczona za pomocą logiki biznesowej, rekordy powinny zwisać z tabeli order/order_item
Jeśli chodzi o implementację struktury w SQL, przyjmę, że wszystkie zamówienia są wysyłane z jednego magazynu i że wysyłka musi być zawieszona poza tabelą zamówień (ale pomysły powinny mieć zastosowanie gdzie indziej):
-
Starszym sposobem wymuszenia magazynów kopii zapasowych zero/jeden byłoby zawieszenie rekordu Warehouse_Source tabeli Orders i dołączenie pola „IsPrimary” lub „ShippingPriority”, a następnie dołączenie unikalnego indeksu złożonego zawierającego identyfikator zamówienia i IsPrimary/ShippingPriority.
-
jeśli będziesz mieć tylko jeden magazyn zapasowy, możesz dodać do zamówienia pola ShippingSource_WareHouseID i ShippingSource_Backup_WareHouseID. Chociaż to nie jest trasa, którą bym wybrała.
W SQL 2008 i nowszych mamy wspaniały dodatek Przefiltrowane indeksy . Pozwalają one na dodanie klauzuli WHERE do indeksu, co daje bardziej zwarty indeks. Dodatkową zaletą jest to, że pozwala osiągnąć pewne rzeczy, które w przeszłości można było wykonać tylko za pomocą wyzwalaczy.
- Możesz umieścić unikalny filtrowany indeks na OrderID i IsPrimary/ShippingPriority (GDZIE IsPrimary =0).
Dodaj komentarz lub coś takiego, jeśli chcesz, żebym wyjaśnił dalej.