Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Indicando registro primário/padrão no banco de dados


Entendo seu problema, mas tenho dúvidas sobre partes dele, então serei um pouco mais geral.
  • Se possível, eu armazenaria dados de depósito/depósito de backup com seus dados de inventário (seja diretamente pendurado nos depósitos ou se for específico do produto nas tabelas de inventário).
  • Se a configuração precisar ser calculada por meio de sua lógica de negócios, os registros deverão ficar fora da tabela order/order_item

Em termos de como implementar a estrutura em SQL, assumirei que todos os pedidos são enviados de um único depósito e que o envio deve ser pendurado na tabela de pedidos (mas as ideias devem ser aplicáveis ​​em outro lugar):

  • A maneira mais antiga de impor depósitos de backup zero/um seria pendurar um registro Warehouse_Source da tabela Orders e incluir um campo "IsPrimary" ou "ShippingPriority" e incluir um índice exclusivo composto que inclui OrderID e IsPrimary/ShippingPriority.

  • se você tiver apenas um depósito de backup, poderá adicionar os campos ShippingSource_WareHouseID e ShippingSource_Backup_WareHouseID ao pedido. Embora, este não é o caminho que eu iria.

No SQL 2008 e versões posteriores, temos a maravilhosa adição de Filtered Indexes . Eles permitem que você adicione uma cláusula WHERE ao seu índice -- resultando em um índice mais compacto. Ele também tem o benefício adicional de permitir que você realize algumas coisas que só podiam ser feitas por meio de gatilhos no passado.
  • Você pode colocar um índice filtrado exclusivo em OrderID &IsPrimary/ShippingPriority (WHERE IsPrimary =0).

Adicione um comentário ou algo assim se você quiser que eu explique mais.