我正在为零售商开发一个系统,在决定如何在数据库中表示订单时,我遇到了一些难题。到目前为止,我的Order表的模式如下:
Id - PK
AccountId - FK (Nullable)
ShippingAddressId - FK (Nullable)
BillingAddressId - FK (Nullable)
ShippingMethod - (Nullable)
Type - (Nullable)
Status
Date
SubTotal
Tax
Total
我的问题是我不确定我是否应该在不同的表格中代表网上购物和店内购买。如果我将它们存储在同一个表中,那么所有不可空的字段将是唯一适用于店内购买的字段。
我想到的另一种设计模式是这样的:
在线订单表:
PurchaseId - PK, FK
AccountId - FK
ShippingAddressId - FK
BillingAddressId - FK
ShippingMethod
Type
购买表:
Id - PK
Status
Date
SubTotal
Tax
Total
对于店内购买,根本没有来自在线订单表的参考。
思想?
答案 0 :(得分:0)
我会为位置创建第二个表,其中包含主键和位置信息。这也可以在线。然后在主表中使用foriegn键。然后,您只需填写您正在进行的应用程序的字段要求(在商店或在线)。这也可以让企业只需将其添加到位置表中即可扩展到更多地点。
答案 1 :(得分:0)
我要使用原始设计。也可以更加可维护和高效。
答案 2 :(得分:0)
您的第二个设计非常接近实体子类型模式。如果在线订单表的主键是购买表的外键,那么您将使用实体子类型。
您的原始设计是数据库物理实现的实用设计,因为它易于使用。实体子类型将是逻辑级别的首选设计,因为它清楚地表示关于哪些谓词(列)属于哪些逻辑表的规则。
有些人也会将实体子输入模式用于他们的物理模型,因为他们厌恶空值。