2010-11-11 229 views
5

我正在试图找到一个教程,该教程将指导我了解基于用户的自定义字段的工作原理。就像在调查网站上一样,他们让用户创建自定义字段并存储它们,更重要的是存储通过这些字段输入的数据。如何在数据库中存储自定义用户字段

我正在寻找描述如何在数据库上完成的操作。我遇到了一些麻烦,找到一种方法,一旦用户将其提取到excel/cvs文件,就不会永久检索这些数据。

回答

3

Entity-Attribute-Value model通常用于在关系数据库中处理这种情况。对“EAV模型”的快速搜索会产生比您知道该怎么处理更多的信息。

+0

'快速搜索“EAV模型”'将有望包含应该避免的建议,除非没有其他选择 - 它非常灵活,但不能很好地扩展并且难以查询。以下是一个案例研究的链接:http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/ – 2010-11-11 13:09:07

3

第六范式是实现这一点的正式方式。用3NF表示所有表格,用6NF表示一个或两个表格,您需要在没有DDL更改的情况下添加列表。谨慎使用。

EAV是6NF的混蛋之子。那意味着什么,做这件事的人写下来,对6NF没有正式的理解,经常会造成怪诞。

当然,你必须保留好的标准:使用数据类型;声明性参照完整性(外键);不要让这些获得任何东西。任何人告诉你必须放弃他们,就好像逃跑一样。

6NF/EAV速度非常快,使用服务器的设置处理能力没有障碍。再一次,从任何告诉你必须使用逐行处理或游标的人,或者不能轻松地从行中构建列的人,都要远离任何人。如果您有特定问题,请再次发帖。

这需要超出SQL的当前能力(控件,DDL);为了以受控的方式做到这一点,并避免创建不可维护的怪物,您需要一个小目录来包含元数据。如果你很聪明,你可以使用它生成查询所需的SQL,从而消除大量的其他手工劳动。

周围有很多错误信息,有些“rep”的人很无知。为了在技术上取得成功,我们需要准确的信息,而不是神话和恐惧。您可能对最近发布的帖子感兴趣,我尝试了set the recond straight

0

我们使用3个表格来支持用户定义的字段。 因此,举例来说,如果要将此应用到您的调查表,您可以创建:每个自定义属性

SURVEY_ATTRIBUTE 
- SurveyAttributeId 
- SurveyAttributeName 
- SurveyAttributeType 

SURVEY_ATTRIBUTE_CHOICE 
- SurveyAttributeChoiceId 
- SurveyAttributeChoice 
- SurveyAttributeId 

SURVEY_ATTRIBUTE_VALUE 
- SurveyAttributeValueId 
- SurveyId 
- SurveyAttributeValue 

的SURVEY_ATTRIBUTE表存储一个记录。 SURVEY_ATTRIBUTE_VALUE表存储实际分配给调查的属性。所以如果一个属性不适用于servey,则不存储任何内容。 SURVEY_ATTRIBUTE_CHOICE表存储'LIST'类型属性的所有允许选项。

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

您也可以选择跳过SURVEY_ATTRIBUTE_CHOICE表并将您的允许值存储在SURVEY_ATTRIBUTE字段中的XML字符串中。这将取决于您要在应用程序中实施的方式。

相关问题