我目前正在构建一个需要实现用户定义字段的系统。
我目前有以下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)。
答案 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#中的动态,看看它是否有帮助。