对具有共同和特定属性的实体树建模

时间:2017-05-04 14:05:26

标签: sql tree

我正在尝试为SQL / Java应用程序建模一组实体。

我将不得不处理不同的实体,如汽车,卡车,无人驾驶飞机和船只。

所有这些实体实际上都是一种设备。一台设备可以依赖另一台设备,比如一辆卡车的拖车。

我只能有一个设备实体,在设备依赖另一个设备的情况下引用自身。

但是,如果这些设备具有共同属性,例如parent_id,serial_number,它们也将具有非常不同的属性,并且在一个实体中具有如此多的不同属性将使它膨胀。

我希望每种设备都有特定的实体,一种用于船只,一种用于卡车等......

我想知道如何根据SQL表格对此进行建模。

任何提示?

1 个答案:

答案 0 :(得分:0)

这开始是一个评论,但结果太长了,所以这里是:

首先,为了正确回答这个问题,必须有尽可能多的数据 - 当然,需要存储的数据的完整规范是最好的。更糟糕的是,得到几个专家DBA,给他们完全相同的数据,你可能会发现自己有两种截然不同的方法。话虽如此,我会尽力回答你的问题。

EAV反模式的灵活性与为每种设备类型设置表格的安全性之间存在权衡。还有其他方法可以设计数据库,例如“继承” - 其中有一个设备基表,包含所有常用属性,以及每个特定类型设备的不同表,与之相关联与基础设备表的1:1关系,用于保存所有唯一属性 这就是我在评论中询问你如何经常向系统引入新型设备的原因 - 因为如果它以高频率完成,你可能想要考虑像EAV这样的东西,但是如果这是一个低频,然后我会建议为每个设备使用不同的表。

关于使用基础设备表的问题 - 它取决于其他因素,例如:是否需要将外键中的属性链接到所有设备类型?我在这个问题的上下文中可以想到的一个例子是manufacturer,甚至是colors - 这两个属性应该是你所写的所有设备类型共有的,但也需要在1中:M关系 - 每辆卡车都是由一家制造商生产的,但同一制造商也可能生产汽车或船只,而且所有货车都至少有一种基色。