sql >> Base de Datos >  >> RDS >> Sqlserver

Indicando el registro principal/predeterminado en la base de datos

Entiendo su problema, pero tengo preguntas sobre algunas partes, así que seré un poco más general.

  • Si es posible, almacenaría los datos del almacén/almacén de copia de seguridad con sus datos de inventario (ya sea colgando directamente de los almacenes o si es un producto específico fuera de las tablas de inventario).
  • Si la configuración debe calcularse a través de su lógica empresarial, los registros deben colgarse de la tabla order/order_item

En términos de cómo implementar la estructura en SQL, supondré que todos los pedidos se envían desde un solo almacén y que el envío debe colgarse de la tabla de pedidos (pero las ideas deberían aplicarse en otros lugares):

  • La forma más antigua de hacer cumplir cero/uno de los almacenes de respaldo sería colgar un registro Warehouse_Source de la tabla Pedidos e incluir un campo "Es principal" o "Prioridad de envío" y luego incluir un índice único compuesto que incluya ID de pedido y Es principal/Prioridad de envío.

  • si solo tendrá un almacén de respaldo, puede agregar los campos ShippingSource_WareHouseID y ShippingSource_Backup_WareHouseID al pedido. Aunque, esta no es la ruta que yo tomaría.

En SQL 2008 y versiones posteriores, tenemos la maravillosa adición de Filtered Indexes . Estos le permiten agregar una cláusula WHERE a su índice, lo que da como resultado un índice más compacto. También tiene el beneficio adicional de permitirle lograr algunas cosas que en el pasado solo se podían hacer a través de disparadores.

  • Podría poner un índice filtrado único en OrderID &IsPrimary/ShippingPriority (WHERE IsPrimary =0).

Agrega un comentario o similar si quieres que te explique más.