以采购系统为例。为以下内容使用一个表是否有意义:报价单、订单、发票和贷项凭单?
会有一些不同的细节。例如,每个列表将有其 5 个特殊字段,但另一个说 50 个字段将完全相同。在这种情况下将所有表连接到一个表中是否有意义。并且某些字段未用于某些类型。
我可以看到 Navision 系统在其数据库中做了类似的事情。它使用一个表,但在发布项目后拆分为单独的表。我认为这可能是出于性能原因,因为发布的项目可能会变得非常大。& 拆分成单独的表会加快查询速度。但这只是我的想法。
所以我的主要困境是......在这种情况下推荐的方法是什么:一张桌子或单独的桌子?各自的优缺点是什么?需要考虑哪些业务因素?
谢谢你的帮助!
基本上有三个选项(通过三个选项的组合可能会变得复杂):
以下是一些需要考虑的因素:
基于这些考虑,我个人会将表格分开。尽管它们可能具有相似的属性,但它们是根本不同的实体。
然而,我会尝试做的是查看这些通用属性集,看看它们是否真的属于报价/订单/发票/信用备忘录,或者将它们规范化到他们自己的表格中是否会是一个更好的主意。例如,如果您有客户名字、客户姓氏、客户街道 1 等,将其拆分为客户键(或客户和地址键,取决于具体情况)可以减少每个中的列总数四个主要实体中,减少重复并获得正常化的其他好处。
有可能您已经将所有内容进行了最大程度的规范化,并且实际上每个实体确实合法地具有 50 个共同的属性。在这种情况下,我仍然会保留单独的表格,因为您谈论的是根本不同的事情,而这些事情恰好相互关联。
凯文做出了出色的回应。我也会选择 nr。3.
但最终归结为两件事:
桌子的大小
查询的复杂性。
表的大小增加了规范化的需要,反之亦然查询的复杂性。
或者说简单点:如果您经常需要合并这些表,请考虑一张大表。如果行数很大,请规范化。或者,如果您的情况介于两者之间,请使用正确的(从数据库完整性的角度来看)解决方案 - 分开。