我有一个模型已经有几十个列,大部分时间都会被填充。现在我需要添加每次可能不同的字段。
什么是最好的方法?我不喜欢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 > 20
和SELECT fields FROM table WHERE ep_1='ABC'
最佳解决方案是什么?
答案 0 :(得分:3)
什么数据库?例如,对于SQL Server,您可以考虑使用针对稀疏表优化的Sparse Columns。对于EAV建模,我建议您阅读SQL Server客户顾问团队关于该主题的白皮书:Best Practices for Semantic Data Modeling for Performance and Scalability。许多建议也适用于其他供应商,不是特定于SQL Server的。