我喜欢entity-attribute-value的东西,因为我可以添加新字段并在删除外表行时自动删除行,但我不喜欢我不能强制执行数据类型的事实。选择查询很复杂。
是否有更好的方法不涉及为每个属性创建表?
如果我创建一个包含所有可能属性的非常大的表,即使大多数行在大多数列上都有NULL,这个表是否会占用空间?
答案 0 :(得分:1)
您可以使用多个值字段在EAV模型中强制执行数据类型。这有点棘手,因为您需要另一列来指定类型,然后需要额外的约束来指定只填充一个值并且它与类型匹配。
在大多数数据库中,您可以使用检查约束来处理此问题。
此外,您只能使用单个字符串值,然后使用检查约束强制执行字符串的内容。这通常就足够了。这些约束很好地利用了支持它们的数据库中的正则表达式。
至于你的第二个问题。每行将占用实体/属性列的空间。 NULL
值是否占用任何空间取决于数据库,但此空间通常很小。