Database design 在创建子表时,哪一个是好的数据库设计?

Database design 在创建子表时,哪一个是好的数据库设计?,database-design,Database Design,在设计子表时,我注意到了两种方法 方法1示例: Master Table >>Order Table (order_id pk) Child Table >>order_products table (order_id,product_id, quantity,PK (order_id,product_id)) 方法2示例: Master Table >>Order Table (order_id pk) Child Table >>order_products table (orde

在设计子表时,我注意到了两种方法

方法1示例:


Master Table >>Order Table (order_id pk)
Child Table >>order_products 
table (order_id,product_id, quantity,PK (order_id,product_id))

方法2示例:


Master Table >>Order Table (order_id pk)
Child Table >>order_products table (order_product_id PK, order_id,product_id, quantity)
问题: 请注意,我们在第二种方法中使用了addition
order\u product\u id
。这就是我的问题,使用组合主键还是像方法2中那样引入一个新列

利与弊是什么。
答案取决于关系吗?(如果是
一对多
方法1更好,或者是
多对多
方法2更好等等)

你似乎已经理解(或者你呢?)一对多和多对多关系之间的区别,所以我不确定你在问什么


当你有一对多时,使用第二种模式;当你有多对多关系时,你需要第一种模式的额外表格。

你似乎已经理解(或者你真的理解?)一对多和多对多关系之间的区别,所以我不确定你在问什么


当你有一对多时,使用第二种模式;当您有多对多时,您需要第一个模式的额外表。

第二个模式是可以选择的,因为第一个模式中有一个复合主键:

PK (order_id,product_id)
所以你总是需要这两个值来引用一个记录


我推荐第二个,如果您需要一些限制,请在订单id和产品id上创建一个唯一索引。

第二个是可以选择的,因为第一个中有一个复合主键:

PK (order_id,product_id)
所以你总是需要这两个值来引用一个记录


我推荐第二个,如果您需要一些限制,请在订单id和产品id上创建一个唯一的索引。

这不是设计问题,而是功能问题

在您的第一个示例中,您如何处理订购3本书的人?在同一本书中输入3个不同的时间(2个孩子)

通常-抱歉-详细信息应包含所有reelvant信息。这包括金额,但也包括文本和价格信息

为什么?

因为根据您的业务情况,您可能会在订单到达后更改项目描述或价格,这可能会更改未来订单的描述或价格,但不会更改正在处理的订单的描述或价格

想象一下,我去你的商店订购了一个9,99的小部件,然后-2分钟后-有人将价格改为14,99。我仍然应该以9,99的价格得到这个小部件,因为这是我下订单时的vlaid价格。如果你能处理我14,99的订单,那就是欺诈


我建议你变得专业一点。获取数据模型资源手册第1卷的副本。有许多用于标准scnearios的数据模型,如订单处理。

这不是设计问题,而是功能问题

在您的第一个示例中,您如何处理订购3本书的人?在同一本书中输入3个不同的时间(2个孩子)

通常-抱歉-详细信息应包含所有reelvant信息。这包括金额,但也包括文本和价格信息

为什么?

因为根据您的业务情况,您可能会在订单到达后更改项目描述或价格,这可能会更改未来订单的描述或价格,但不会更改正在处理的订单的描述或价格

想象一下,我去你的商店订购了一个9,99的小部件,然后-2分钟后-有人将价格改为14,99。我仍然应该以9,99的价格得到这个小部件,因为这是我下订单时的vlaid价格。如果你能处理我14,99的订单,那就是欺诈


我建议你变得专业一点。获取数据模型资源手册第1卷的副本。有很多用于标准SCNIERIOS的数据模型,比如oder处理。

我根本不会考虑多对多。这是一个简单的一对多关系。您应该将订单项标识为自己的实体,而不是链接表

  • Order有许多OrderItems
  • OrderItem具有产品、数量等
  • 订单和产品可能有唯一的约束。但是有必要吗
从这个角度来看,这显然是解决方案二:

  • 订单(订单号主键)
  • 订单项(订单项标识主键、订单标识(FK)、产品标识(FK)、数量)

    • 我根本不会考虑多对多。这是一个简单的一对多关系。您应该将订单项标识为自己的实体,而不是链接表

      • Order有许多OrderItems
      • OrderItem具有产品、数量等
      • 订单和产品可能有唯一的约束。但是有必要吗
      从这个角度来看,这显然是解决方案二:

      • 订单(订单号主键)
      • 订单项(订单项标识主键、订单标识(FK)、产品标识(FK)、数量)

      为问题添加了更多描述为问题添加了更多描述两种设计都有数量字段。在订单中存储价格以防价格发生变化这一点很好。我同意这一建议,但重点不是针对订单的真实db设计,而是关于复合主键或使用单独的自动索引键,哪一个更好?两种设计都有数量字段。关于在订单中存储价格以防价格发生变化,这一点很好。我同意这一建议,但这一点不是关于订单的真正db设计,而是关于复合主键或使用单独的自动索引键,哪一个更好?我不会将链接表与数据表混合。IMHO,只有链接表应该有复合IDS,所以我认为这不是一个很好的数据库设计,虽然它工作。我不会混合链接表与数据表。IMHO,只有链接表应该有复合ID,所以我认为这不是一个很好的数据库设计,虽然它工作。订单产品不应该,我的意思是永远不要存储Product,他们应该使用产品表来查找产品的细节和价格在订单的时间。产品变化