Database 在线和店内购买的单独表格?

Database 在线和店内购买的单独表格?,database,database-design,Database,Database Design,我正在为一家零售商开发一个系统,在决定如何在数据库中表示订单时遇到了一个难题。到目前为止,我的订单表的架构如下所示: Id - PK AccountId - FK (Nullable) ShippingAddressId - FK (Nullable) BillingAddressId - FK (Nullable) ShippingMethod - (Nullable) Type - (Nullable) Stat

我正在为一家零售商开发一个系统,在决定如何在数据库中表示订单时遇到了一个难题。到目前为止,我的订单表的架构如下所示:

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
对于店内购买,在线订单表中根本没有参考


想法?

我会制作第二个位置表,其中包含主键和位置信息。这也可能是在线的。然后在主表中使用外键。然后,您只需填写正在执行的应用程序所需的字段(在商店中或在线)。这还允许业务增长到更多的位置,只需将其添加到位置表中即可。

我将使用原始设计。可能更易于维护和更高效。

您的第二个设计非常接近于实体子类型模式。如果在线订单表的主键是采购表的外键,那么您将拥有实体子类型

您的原始设计是数据库物理实现的实用设计,因为它易于使用。实体子类型将是逻辑级别的首选设计,因为它清楚地表示关于哪些谓词(列)属于哪些逻辑表的规则


有些人也会在他们的物理模型中使用实体子类型模式,因为他们不喜欢空值。

对,只使用PurchaseId作为这两个表的主键肯定更有意义。我只是不太确定你所说的逻辑/物理模型是什么意思。你能详细说明一下吗?区别是什么?