用户定义的字段结构

时间:2013-06-05 09:14:44

标签: sql-server asp.net-mvc entity-framework database-design

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

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

人员表

PersonID(PK)
PersonName

DataField表

FieldID(PK)
FieldName
FieldType

DataFieldValue表

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

我已成功在原型中成功使用此结构。然而,我的生产系统将不得不迎合更多的记录。我倾向于坚持这种方法,但'DataFieldValue'表可能会变得非常大。

这在我的生产系统中是否安全,或者以某种方式解决这个问题会更好吗?

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

1 个答案:

答案 0 :(得分:1)

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

这是我的Person表中的数据看起来像

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

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

你对数据的adhoc查询(即使使用此模式也很困难),一致(fieldid可能不匹配),但你获得了性能和易用性。

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

相关问题