Jeg forstår dit problem, men har spørgsmål om dele af det, så jeg vil være lidt mere generel.
- Hvis det overhovedet er muligt, vil jeg gemme lager-/backup-varehusdata med dine lagerdata (enten direkte hængende af lagre, eller hvis det er produktspecifikt uden for lagertabellerne).
- Hvis opsætningen skal beregnes gennem din forretningslogik, bør posterne hænge ud af tabellen ordre/ordre_vare
Med hensyn til, hvordan man implementerer strukturen i SQL, vil jeg antage, at alle ordrer sendes ud af et enkelt lager, og at forsendelsen skal hænges fra ordretabellen (men ideerne bør kunne anvendes andre steder):
-
Den ældre måde at håndhæve nul/én backup-varehuse på ville være at hænge en Warehouse_Source-record af ordretabellen og inkludere et "IsPrimary"-felt eller "ShippingPriority" og derefter inkludere et sammensat unikt indeks, der inkluderer OrderID og IsPrimary/ShippingPriority.
-
hvis du kun vil have ét backuplager, kan du tilføje felterne ShippingSource_WareHouseID og ShippingSource_Backup_WareHouseID til ordren. Selvom det ikke er den rute, jeg ville gå.
I SQL 2008 og nyere har vi den vidunderlige tilføjelse af Filtrerede indekser . Disse giver dig mulighed for at tilføje en WHERE-klausul til dit indeks -- hvilket resulterer i et mere kompakt indeks. Det har også den ekstra fordel, at det giver dig mulighed for at opnå nogle ting, som kun kunne gøres gennem triggere i fortiden.
- Du kan sætte et unikt filtreret indeks på OrderID &IsPrimary/ShippingPriority (WHERE IsPrimary =0).
Tilføj en kommentar eller sådan, hvis du vil have mig til at forklare yderligere.