Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Indica il record primario/predefinito nel database

Comprendo il tuo problema, ma ho domande su parti di esso, quindi sarò un po' più generale.

  • Se possibile, memorizzerei i dati del magazzino/magazzino di backup con i tuoi dati di inventario (o sospesi direttamente nei magazzini o se è specifico del prodotto fuori dalle tabelle dell'inventario).
  • Se l'impostazione deve essere calcolata tramite la tua logica aziendale, i record dovrebbero essere bloccati dalla tabella order/order_item

In termini di come implementare la struttura in SQL, presumo che tutti gli ordini vengano spediti da un unico magazzino e che la spedizione debba essere sospesa dalla tabella degli ordini (ma le idee dovrebbero essere applicabili altrove):

  • Il modo più vecchio per imporre zero/uno magazzini di backup sarebbe appendere un record Warehouse_Source della tabella Orders e includere un campo "IsPrimary" o "ShippingPriority", quindi includere un indice univoco composito che include OrderID e IsPrimary/ShippingPriority.

  • se avrai sempre e solo un magazzino di backup, puoi aggiungere i campi ShippingSource_WareHouseID e ShippingSource_Backup_WareHouseID all'ordine. Anche se questa non è la strada che farei.

In SQL 2008 e versioni successive abbiamo la meravigliosa aggiunta di Indici filtrati . Questi ti consentono di aggiungere una clausola WHERE al tuo indice, ottenendo un indice più compatto. Ha anche il vantaggio aggiuntivo di permetterti di realizzare alcune cose che potevano essere fatte solo attraverso i trigger in passato.

  • Potresti inserire un indice filtrato univoco su OrderID e IsPrimary/ShippingPriority (WHERE IsPrimary =0).

Aggiungi un commento o qualcosa del genere se vuoi che ti spieghi ulteriormente.