如何在数据库中存储自定义用户字段

5
我正在寻找一份教程,以指导我如何使用用户定制字段。就像在调查网站上一样,他们允许用户创建自定义字段并存储它们,更重要的是存储通过这些字段输入的数据。
我正在寻找描述这个数据库操作的教程。我遇到了一些问题,因为找到一种不需要花费很长时间来提取这些数据并将其导出到Excel / CVS文件的方法比较困难。
3个回答

3

实体-属性-值模型通常用于在关系型数据库中处理这种情况。快速搜索“EAV模型”将提供比您所需更多的信息。


快速搜索“EAV模型”将有希望包括建议,除非没有其他选择,否则应该避免使用 - 它非常灵活,但不易于扩展且查询困难。这是一个案例研究的链接:http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/ - user359040

3
第六范式是实现这一点的正式方法。对所有表使用3NF,对需要添加列而无需DDL更改的一两个表使用6NF,使用得当。
EAV是第六范式的私生子。这意味着,那些使用它并写有关它的人并没有正式理解6NF,因此经常会创建畸形。
当然,您必须保持良好的标准:使用数据类型;声明性参照完整性(外键)等。不要放弃这些来获得任何东西。如果有人告诉您必须放弃,请立即逃离。
第六范式/ EAV非常快速,无妨碍使用服务器的集合处理能力。再次强调,逃离那些告诉您必须使用逐行处理或游标或无法轻松从行构建列的人。如果您有具体问题,请再次发布。
这需要超越SQL的当前能力(控件、DDL);为了以可控的方式完成此操作并避免创建难以维护的大型系统,您需要一个小目录来包含元数据。如果您聪明地使用它,可以生成所需的查询SQL,从而消除许多手动工作。
有很多错误信息流传,一些“声望”高的人也不知所措。为了在技术上取得成功,我们需要准确的信息,而不是神话和恐慌。您可能会对最近的一篇文章感兴趣,在其中我试图澄清事实

0

我们使用3个表格来支持用户定义字段,每个表格一个。

例如,如果您想将其应用于您的SURVEY表格,您可以创建:

SURVEY_ATTRIBUTE
- SurveyAttributeId
- SurveyAttributeName
- SurveyAttributeType

SURVEY_ATTRIBUTE_CHOICE
- SurveyAttributeChoiceId
- SurveyAttributeChoice
- SurveyAttributeId

SURVEY_ATTRIBUTE_VALUE
- SurveyAttributeValueId
- SurveyId
- SurveyAttributeValue

SURVEY_ATTRIBUTE表每个自定义属性存储一条记录。 SURVEY_ATTRIBUTE_VALUE表存储实际分配给调查的属性。因此,如果某个属性不适用于调查,则不会存储任何内容。 SURVEY_ATTRIBUTE_CHOICE表存储类型为“LIST”的属性的所有可选选择。

SURVEY_ATTRIBUTE表中的SurveyAttributeType字段用于描述属性的类型。我们只使用少量允许的类型,如CHAR、DATE、NUMBER、LIST。根据该值,我们的应用程序知道如何处理存储在SurveyAttributeValue字段中的值。当然,您可以进一步规范化,允许更广泛的范围,指定最大字段长度等等...这完全取决于您希望给予最终用户的自由程度。我们尽量保持简单,因为我们的目标受众不是数据库管理员,而是最终用户,他们通常不关心字段长度等等。

您还可以选择跳过SURVEY_ATTRIBUTE_CHOICE表,将允许的值存储在SURVEY_ATTRIBUTE字段中的XML字符串中。这将取决于您将如何在应用程序中实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接