我遇到这样的情况: 我在一张桌子上有多个对象,通常我的列取决于诸如起重机,挖掘机等对象的类型。
我的问题是,起重机除挖掘机外还有其他参数,因此几列具有null
值。我以为我可以做另一个表(attributes
)并在属性表和设备表之间添加一个关系。表attributes
将具有id
attributeName
attributeValue
equipmentId
甚至还有type
(以在attributeValue
中定义值的类型)。这是个好主意吗?也许有解决这个问题的其他方法?
答案 0 :(得分:1)
这取决于您对这些表的处理方式。
我可以想象以下解决方案:
保留当前的解决方案。
这将导致混乱的表定义,随着新对象的加入,您可能必须添加更多列,但是NULL值不会占用PostgreSQL表中的任何空间。
如果您需要使用外键引用该表并希望表的数量尽可能少,这是一个很好的解决方案。
有一个表,该表仅包含所有对象共有的列,并为每个对象定义一个带有其他列的表。这些表具有指向所有对象表的UNIQUE
外键。
这与第一个解决方案相似,但最终只剩下相关的列。
您的查询将具有更多的联接,但是如果您只想访问某种类型的对象,则可能会更快。
每种对象类型只有一个表,没有公用表。
这将使查询只访问一种类型的对象的查询变得更简单,更快捷,但是您不能拥有针对所有对象的外键。
有一个空表,其中包含所有对象公用的列,并有一个继承自公用表的每种对象类型的表。
这是3的变体,但是可以强制使用公共列,并可以更轻松地在所有对象之间编写查询。
答案 1 :(得分:0)
您正在用关系模型表示对象数据。
假设这样做有充分的理由,请考虑将设备与属性关联的m:n关系X
。
X
可以具有instance
属性,以使用其属性值指定(标识)特定的对象实现。value
中的X
列一起使用专业人士:
骗局: