2017-05-04 101 views
0

我试图为SQL/Java应用程序建模一组实体。对具有共同和特定属性的实体树建模

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

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

我只能拥有一个设备实体,在设备依赖于另一个设备的情况下引用自身。但是,如果这些设备具有共同属性,如parent_id,serial_number,它们也将具有非常不同的属性,并且在一个实体中具有如此多不同的属性会使其膨胀。

我希望有具体的实体的各种设备,一个是船,一个用于卡车,等...

我不知道如何在SQL表方面对此建模。

任何提示?

+0

这取决于许多变量。例如,您多长时间一次向系统引入新型设备? –

+0

@ZoharPeled假设我从3种类型的设备开始,每种都有15到20个特定属性 – Stephane

回答

0

这开始了作为一个评论,但它的转向了是太长了,所以这里有云:

首先,为了正确地回答这个问题,必须有尽可能多的数据可能 - 一个完整的规范当然,需要存储的数据是最好的。甚至最糟糕的是,请几位专家级数据库管理员,向他们提供完全相同的数据,并且您可能会发现自己有两种截然不同的方法。话虽如此,我会尽力回答你的问题。

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

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

+0

我将避免使用EAV模式。至于有一个基础设备表,你说它取决于一些因素,显示其中之一。仅考虑这一因素,是否需要通用外键属性提倡使用或避免基表? – Stephane

+1

不足以决定。如果他们都在多方面,那么是的。如果他们都在一边,比不。 –

相关问题