我正在为一家零售商开发一个系统,在决定如何在数据库中表示订单时,我遇到了一个难题。到目前为止,我的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对于店内购买,根本不会有来自在线订单表的引用。
有什么想法?
发布于 2014-05-25 06:56:08
我将为location创建第二个表,其中包含主键和位置信息。这也可能是在线的。然后在你的主表中使用一个外键。然后,您只需填写您正在执行的应用程序所需的字段(在商店或在线)。这还允许业务增长到更多的位置,只需将其添加到location表中即可。
发布于 2014-05-25 10:49:59
我将采用最初的设计。可能更容易维护,也更高效。
发布于 2014-05-25 20:02:21
您的第二个设计非常接近于实体子类型模式。如果您的在线订单表的主键是您的purchase表的外键,那么您将拥有实体子类型。
您的原始设计是针对数据库的物理实现的实用设计,因为它易于使用。实体子类型将是逻辑层的首选设计,因为它清楚地表示了关于哪些谓词(列)属于哪些逻辑表的规则。
有些人也会将实体子类型模式用于他们的物理模型,因为他们对空值有一种反感。
https://stackoverflow.com/questions/23850371
复制相似问题