Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Angabe des Primär-/Standarddatensatzes in der Datenbank

Ich verstehe Ihr Problem, habe aber Fragen zu Teilen davon, also werde ich etwas allgemeiner sein.

  • Wenn möglich, würde ich Lager-/Backup-Lagerdaten mit Ihren Inventardaten speichern (entweder direkt von Lagern hängend oder wenn es produktspezifisch von den Inventartabellen ist).
  • Wenn die Einrichtung durch Ihre Geschäftslogik berechnet werden muss, sollten die Datensätze an der Tabelle order/order_item hängen

In Bezug auf die Implementierung der Struktur in SQL gehe ich davon aus, dass alle Bestellungen aus einem einzigen Lager heraus versendet werden und dass der Versand von der Bestelltabelle abgehängt werden muss (aber die Ideen sollten auch anderswo anwendbar sein):

  • Die ältere Methode zum Erzwingen von Null/Eins-Sicherungslagern wäre, einen Warehouse_Source-Datensatz der Orders-Tabelle aufzuhängen und ein „IsPrimary“-Feld oder „ShippingPriority“ einzuschließen und dann einen zusammengesetzten eindeutigen Index einzuschließen, der OrderID und IsPrimary/ShippingPriority enthält.

  • Wenn Sie immer nur ein Backup-Lager haben, können Sie die Felder ShippingSource_WareHouseID und ShippingSource_Backup_WareHouseID zur Bestellung hinzufügen. Dies ist jedoch nicht der Weg, den ich gehen würde.

In SQL 2008 und höher haben wir die wunderbare Ergänzung von Gefilterte Indizes . Diese ermöglichen es Ihnen, Ihrem Index eine WHERE-Klausel hinzuzufügen, was zu einem kompakteren Index führt. Es hat auch den zusätzlichen Vorteil, dass Sie einige Dinge erreichen können, die in der Vergangenheit nur durch Auslöser erledigt werden konnten.

  • Sie könnten einen eindeutigen gefilterten Index auf OrderID &IsPrimary/ShippingPriority setzen (WHERE IsPrimary =0).

Fügen Sie einen Kommentar oder ähnliches hinzu, wenn Sie möchten, dass ich es weiter erkläre.