Tôi hiểu vấn đề của bạn, nhưng có thắc mắc về các phần của vấn đề, vì vậy tôi sẽ tổng quát hơn một chút.
- Nếu có thể, tôi sẽ lưu trữ dữ liệu kho / kho dự phòng cùng với dữ liệu kho của bạn (hoặc treo trực tiếp kho hoặc nếu đó là sản phẩm cụ thể ngoài bảng kiểm kê).
- Nếu quá trình thiết lập phải được tính toán thông qua logic kinh doanh của bạn thì các bản ghi sẽ bị treo khỏi bảng order / order_item
Về cách triển khai cấu trúc trong SQL, tôi sẽ giả định rằng tất cả các đơn đặt hàng được vận chuyển từ một kho duy nhất và việc vận chuyển phải được treo khỏi bảng đơn đặt hàng (nhưng các ý tưởng này nên có thể áp dụng ở nơi khác):
-
Cách cũ hơn để thực thi không / một kho dự phòng là treo bản ghi Warehouse_Source của bảng Đơn hàng và bao gồm trường "IsPrimary" hoặc "ShippingPosystem", sau đó bao gồm một chỉ mục duy nhất tổng hợp bao gồm OrderID và IsPrimary / ShippingPceptions.
-
nếu bạn chỉ có một kho dự phòng, bạn có thể thêm các trường ShippingSource_WareHouseID và ShippingSource_Backup_WareHouseID vào đơn đặt hàng. Mặc dù, đây không phải là con đường tôi sẽ đi.
Trong SQL 2008 trở lên, chúng tôi có sự bổ sung tuyệt vời của Chỉ mục được lọc . Điều này cho phép bạn thêm mệnh đề WHERE vào chỉ mục của mình - dẫn đến chỉ mục nhỏ gọn hơn. Nó cũng có thêm lợi ích là cho phép bạn hoàn thành một số việc mà trước đây chỉ có thể thực hiện được thông qua trình kích hoạt.
- Bạn có thể đặt một chỉ mục được lọc duy nhất trên OrderID &IsPrimary / ShippingPinent (WHERE IsPrimary =0).
Thêm một nhận xét hoặc những điều tương tự nếu bạn muốn tôi giải thích thêm.