存储动态字段的适当 table 结构是什么?
What's the appropriate table structure for storing dynamic fields?
我喜欢实体属性值的东西,因为我可以添加新字段并在删除外部 table 行时自动删除行,但我不喜欢我不能' t 强制一个数据类型。 select 查询很复杂。
有没有更好的方法不涉及为每个属性创建 table?
如果我用每个可能的属性创建一个非常大的 table,这个 table 会占用 space 即使大多数行在大多数列上都为 NULL 吗?
您可以通过使用多个值字段在 EAV 模型中强制执行数据类型。这有点棘手,因为您需要另一列来指定类型,然后需要额外的约束来指定只填充一个值并且它与类型匹配。
在大多数数据库中,您可以使用检查约束来处理这个问题。
此外,您可以仅使用单个字符串值,然后使用检查约束强制执行字符串的内容。这通常就足够了。此类约束充分利用了支持它们的数据库中的正则表达式。
关于你的第二个问题。对于 entity/attribute 列,每一行将占据 space。 NULL
值是否占据任何 space 取决于数据库,但这个 space 通常很小。
我喜欢实体属性值的东西,因为我可以添加新字段并在删除外部 table 行时自动删除行,但我不喜欢我不能' t 强制一个数据类型。 select 查询很复杂。
有没有更好的方法不涉及为每个属性创建 table?
如果我用每个可能的属性创建一个非常大的 table,这个 table 会占用 space 即使大多数行在大多数列上都为 NULL 吗?
您可以通过使用多个值字段在 EAV 模型中强制执行数据类型。这有点棘手,因为您需要另一列来指定类型,然后需要额外的约束来指定只填充一个值并且它与类型匹配。
在大多数数据库中,您可以使用检查约束来处理这个问题。
此外,您可以仅使用单个字符串值,然后使用检查约束强制执行字符串的内容。这通常就足够了。此类约束充分利用了支持它们的数据库中的正则表达式。
关于你的第二个问题。对于 entity/attribute 列,每一行将占据 space。 NULL
值是否占据任何 space 取决于数据库,但这个 space 通常很小。