【问题标题】:What's the appropriate table structure for storing dynamic fields?存储动态字段的适当表结构是什么?
【发布时间】:2016-05-16 00:45:26
【问题描述】:

我喜欢实体属性值,因为我可以添加新字段并在删除外部表行时自动删除行,但我不喜欢我无法强制执行数据类型的事实。并且选择查询很复杂。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!我进行了更多搜索,并找到了另一种方式-子类型-stackoverflow.com/questions/3579079/…。它需要修改架构,但至少我可以在所有表​​中保持相同的 ID。你认为它是 eav 的一个很好的替代品吗?
    • @thelolcat 。 . .更好的解决方案取决于“要求”。如果您使用的是 Postgres,您还可以考虑表继承。
    猜你喜欢
    • 2012-09-02
    • 2014-04-25
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多