存储动态字段的表结构是什么?

时间:2016-05-15 16:42:58

标签: sql database relational-database schema entity-attribute-value

我喜欢entity-attribute-value的东西,因为我可以添加新字段并在删除外表行时自动删除行,但我不喜欢我不能强制执行数据类型的事实。选择查询很复杂。

是否有更好的方法不涉及为每个属性创建表?

如果我创建一个包含所有可能属性的非常大的表,即使大多数行在大多数列上都有NULL,这个表是否会占用空间?

1 个答案:

答案 0 :(得分:1)

您可以使用多个值字段在EAV模型中强制执行数据类型。这有点棘手,因为您需要另一列来指定类型,然后需要额外的约束来指定只填充一个值并且它与类型匹配。

在大多数数据库中,您可以使用检查约束来处理此问题。

此外,您只能使用单个字符串值,然后使用检查约束强制执行字符串的内容。这通常就足够了。这些约束很好地利用了支持它们的数据库中的正则表达式。

至于你的第二个问题。每行将占用实体/属性列的空间。 NULL值是否占用任何空间取决于数据库,但此空间通常很小。