Database 具有公共基的关系数据库设计表

Database 具有公共基的关系数据库设计表,database,relational,Database,Relational,我很难找到适合这种情况的最佳设计解决方案。我有两张桌子,有一个共同的底座。目前我的设计如下:我有一个订单表(公共基础): 我有另一个关于订单表的表格: [product_order] order_id fk product_id quantity price [special_order] order_id fk description price_estimate color size 我有第二个关于订单表的表格: [product_order] order_id fk

我很难找到适合这种情况的最佳设计解决方案。我有两张桌子,有一个共同的底座。目前我的设计如下:我有一个订单表(公共基础):

我有另一个关于订单表的表格:

[product_order]
 order_id fk
 product_id
 quantity
 price
[special_order]
 order_id fk
 description
 price_estimate
 color
 size
我有第二个关于订单表的表格:

[product_order]
 order_id fk
 product_id
 quantity
 price
[special_order]
 order_id fk
 description
 price_estimate
 color
 size
这两个表共享我喜欢的相同order\u id。我经常不得不使用order_表中的可用信息(比如“company=200”)对该表进行大型查询。但对于每个结果,我还需要它的数据来自产品订单或特殊订单,这取决于它的类型。因此,我看到的唯一最佳解决方案是将查询与order_id上的两个表连接起来,然后过滤信息。我看到的另一个选择是将公共列添加到每个表中,但之后我会进行大量的重新组织,以使它们按正确的顺序排列


是否有更好的方法来组织数据?

因此,这些额外的表是特定订单id(1:1)的额外属性

我会考虑将所有字段添加到公共表中,或者至少从最常用的子表中添加字段。

如果不合适,您可能希望将“Type”添加到公共表中,并让触发器管理相关记录的插入/删除,以避免与孤立项等混淆


使用带有左连接的视图(内部连接不是更好吗?)获取不同的类型

可能重复的是
order->product\u order
order->special\u order
都是一对多关系?是的,它们是1-1。是的,将所有字段添加到公共表可以解决问题,但这不是一个好的设计,因为一半会缺少这些字段,另一半会缺少其他字段,但在实践中,这可能是最好的解决方案:)但考虑一下,将所有字段添加到公共表将导致与在查询中加入三个表并随后更正数据相同的结果,并且使用正确的索引可能会同样快。我认为您缺少空值点,以及关系在数据库中的工作方式。除了极少数例外(你的不是),你的数据库中根本不应该有1:1的关系。这不是性能问题,而是设计模式。在一次选择时执行两次左连接会增加数据库的复杂性,但没有任何好处。此外,您还需要多做一些工作来维护引用完整性。你真的应该考虑重新设计一张桌子。编辑:我无缘无故地重新提出了一个老问题。哦,天哪。