2

我有一个模型,它已经有几十个列,大部分时间都会被填充。现在我需要添加每次可能不同的字段。

最好的方法是什么?我不喜欢 EAV 模式。我也不喜欢有一个稀疏表的想法,特别是考虑到这些额外的属性可能会有很大的不同。

例子:

WorkOrder:
PK id
FK assigned_to
FK contractor
DATE expected_completion
DATE actual_completion
... (many more)

现在我想添加如下属性:

ep_1 (extra_property)
ep_2
ep_3
ep_4
... (many more)

这些额外的属性可能因记录而异,并且大多数情况下它们的数量有限,但不能保证。

将记录视为:

id  |  assigned_to  | contractor  | ... | ep_1   | ep_2  | ep_3 | ... | ep_n
1   |  2            | 3           | ... | XYZ    | NULL  | NULL | ... | 23
2   |  3            | 5           | ... | NULL   | 1     | NULL | ... | NULL
3   |  2            | 1           | ... | NULL   | 0     | NULL | ... | NULL
4   |  4            | 1           | ... | XYZ    | NUL   | NULL | ... | 45

我希望能够列出、过滤和搜索记录,就好像那些额外的属性实际上是列一样,例如:我应该能够进行类似SELECT fields FROM table WHERE ep_n > 20SELECT fields FROM table WHERE ep_1='ABC'

最好的解决方案是什么?

4

1 回答 1

3

什么数据库?以 SQL Server 为例,您可以考虑使用针对稀疏表进行了优化的稀疏列。对于 EAV 建模,我建议阅读 SQL Server 客户顾问团队关于该主题的白皮书:性能和可扩展性语义数据建模的最佳实践。许多建议也适用于其他供应商,并非特定于 SQL Server。

于 2010-08-15T03:10:34.957 回答