使用EAV模式时,我是否应该更具体地使用列名?
我有一个自定义表单构建器应用程序,用户可以从中选择一组特定字段类型(文本框,文本区域,电子邮件,URL,整数,小数,日期等)。它与formstack和surveymonkey的想法相似。
我决定使用EAV方法存储用户在这些表单字段中输入的值,我想知道的是数据库中的列是通用的还是特定的? e.g。
通用
FormValuesTable
- Id
- UserId
- QuestionId
- TextValue(类型NVARCHAR) - 将保留文本框,文本区域,电子邮件和URL值
- IntegerValue(类型整数)
- DecimalValue(类型十进制)
- DateValue(Type DateTime)
具体
FormValuesTable
- Id
- UserId
- QuestionId
- TextboxValue(输入NVARCHAR)
- TextAreaValue(输入NVARCHAR)
- EmailValue(输入NVARCHAR)
- URLValue(输入NVARCHAR)
- IntegerValue(类型整数)
- DecimalValue(类型十进制)
- DateValue(Type DateTime)
我还有一个问题表,其中包含字段类型(文本框,文本区域,电子邮件,URL,整数,小数,日期)。
拥有Generic表的优点在于它意味着更少的列,并且具有特定表的优势在于它使域更有意义。