DB表的泛化与专业化

che*_*ong 7 database

当我想设计模拟有限父子关系的数据库表时,例如,计算机作为父,以及作为子的内部组件; 或者是一个简单的组织层次结构,我经常被撕裂使用的方法 -

  1. 一种"专用表"方法,我在其中为每个可能的实体创建一个表.在计算机组件示例中,我将有一个Computer表和一个Component表,在Component表中将ComputerID作为FK引用回Computer.ComputerID.要么
  2. 一种'通用表方法,其中我有一个名为Component的表表,ComponentID为PK,而ParentComponentID为FK,引用其父组件ID.

Jay*_*y S 3

如果我知道需要扩展模型以支持层次结构中的新级别,我更喜欢通用表。

通用表的缺点是失去了强类型,我通常通过添加“类型”表(即通用“组件”表的“组件类型”)来解决这个问题。

这允许模型可以扩展,并且仍然为层次结构中的每个组件提供强类型。

编辑: 马库斯提出了计算机与组件相同的问题。我应该澄清,通用表方法应该用于类似的对象。