Database design 总体最佳实践:多个表还是一个类型ID?

Database design 总体最佳实践:多个表还是一个类型ID?,database-design,Database Design,我是在为一个程序设计一个数据库时想到这一点的,这个程序可以跟踪货物进出某一地点。或者我可以有一个表来跟踪每次重新定位,用一个布尔字段表示对象是移入还是移出。或者,我可以有两个几乎相同的表,分别用于两个不同的方向 我的问题是: 根据选项有限的字段,将一个表拆分为两个或多个表通常有利吗? 我在拆分中看到的优势: 避免使用条件语句 将来出现表之间的差异时更容易 单个表的性能更好,因为表更小 我认为合并的好处是: 避免代码重复 将来添加相同的行为时更容易 在需要从多个表检索数据的情况下,性能会更好

我是在为一个程序设计一个数据库时想到这一点的,这个程序可以跟踪货物进出某一地点。或者我可以有一个表来跟踪每次重新定位,用一个布尔字段表示对象是移入还是移出。或者,我可以有两个几乎相同的表,分别用于两个不同的方向

我的问题是: 根据选项有限的字段,将一个表拆分为两个或多个表通常有利吗?

我在拆分中看到的优势:

  • 避免使用条件语句
  • 将来出现表之间的差异时更容易
  • 单个表的性能更好,因为表更小
我认为合并的好处是:

  • 避免代码重复
  • 将来添加相同的行为时更容易
  • 在需要从多个表检索数据的情况下,性能会更好
  • 防止表的任意增长
这两种方法在不同的情况下看起来都很有效。但我想知道的是,如果你不知道你需要哪些优势,那么这些方法中的哪一种是最佳实践?整体来说,一个直接的比较好吗?如果不是,如果你错了,什么会引起最小的痛苦

或者有没有一种不同的设计方法专门处理这个难题?当我结束这个问题时,我想这也是一个选项,将相同的数据存储在一个表中,然后针对差异引入额外的表。然而,这种方法似乎过于复杂,无法作为默认方法应用

我发现了另一个相关的问题,以相反的方式提问:。然而,我发现这篇文章非常强调将完全不相关的表合并在一起,这些表恰好代表一个文本字段。这就是答案最终主要关注的问题

我说的是非常相似的表,它们基本上是相同的数据类型,但有一个差异,这导致它们以截然不同的方式使用

我想到的其他例子:

  • 以非常不同的方式使用网站的用户帐户类型
  • 可能具有唯一属性的产品类型
  • 执行不同类型工作的工作类型

我问这个问题可能太早了,因为我现在找到了答案,这有点反高潮,但也许它对其他在互联网上搜索同样进退两难的人有用

当不确定哪一种方法是两者之间的最佳方法时,就有可能从两个世界中获得最佳效果。您可以获取使这些表相同的所有数据,并为此创建一个通用表。在我的例子中,是“货物”。然后,可以有多个不同的表引用此通用表以获取其数据。除了对泛型表的引用之外,它们甚至可能是空的

可能的办法:

  • 从通用表开始,以后根据需要添加更具体的奖金表。如果你不知道将来是否会对变异进行不同的治疗,那么可能是最好的选择
  • 从泛型表开始,再加上引用加载的空表,这些表将来可以根据需要添加专门的列。如果你已经打算以不同的方式对待这些变异,可能是最好的