2

我目前正在构建一个需要实现用户定义字段的系统。

我目前有以下 EAV 'like' 结构。'Person' 表充当主表。

人表

PersonID(PK)
PersonName

数据字段表

FieldID(PK)
FieldName
FieldType

数据字段值表

ID(PK)
DataFieldID(FK)
PersonID(FK)
StringValue
IntValue
LongValue
DateValue
DateAdded
DateUpdated

我已经成功地在原型中使用了这种结构。然而,我的生产系统必须满足更多的记录。我的偏好是坚持使用这种方法,但“DataFieldValue”表可能会变得非常大。

这在我的生产系统中是否安全,或者以某种方式将其分解会更好吗?

我正在使用 SQL Server 和 ASP.net MVC 4(带有 EF 5)。

4

1 回答 1

1

除非您需要查询(SELECT)数据字段值,否则我会采取更激进的方法,并添加一些没有 sql + JSON 的优点。

这就是我的 Person 表中的数据的外观

ID PersonName ExtraProperties
----------
1  ABC        [{'FieldId':1,'FieldName':'Age', 'Value':22},{'FieldId':2,'FieldName':'Gender', 'Value':'Male'}]

使用JSON.Net 之类的库,您可以序列化和反序列化这些内容并在代码中使用它。

您松散了诸如对数据的即席查询(即使使用此模式也很困难)、一致(fieldid 可能不匹配)之类的东西,但您会获得性能和易用性。

我还建议您查看 C# 中的动态,看看它是否有帮助。

于 2013-06-05T09:45:02.647 回答