我有3个对象:ReportReportConditionConditionValue。关系是:Report有许多ReportConditions(例如personID,姓名和出生日期),ReportCondition有许多ConditionValues(例如,用于查询personID的多个ID)。理想情况下,ConditionValue由2个字段组成:IDvalue。由于报表的条件可能引用各种对象和属性(如上面的示例),条件值的数据类型可能是integers(具有业务数据的表中某些其他对象的主键ID),strings或(目前未计划其他类型)。

我看到3个解决方案:


dates设置为ConditionValue.value并存储该值所在的任何数据类型。看来最简单。
varchar记录中创建单独的intValuestringValuedateValue字段,并将相关值存储在相关的数据类型字段中,接受每个记录将具有2个空字段。
为每种条件数据类型创建单独的表-这对于查询而言似乎过于复杂。


ConditionValue方法是否正确?在这种情况下最好的解决方案是什么?

最佳答案

选项1很流行,通常称为Entity-Attribute-Value

这具有一些缺点。


对所有内容使用varchar意味着您不能依靠数据类型来强制有效性。例如,没有什么可以阻止您为应该是数字或日期的值存储“香蕉”。
Varchar需要更多空间来存储数字或日期值。
您将失去使用诸如UNIQUE或FOREIGN KEY之类的约束的能力。


但是,可能弊端较小。

最终,“最佳”解决方案取决于您如何查询它。

10-04 10:55
查看更多