我想设计一个动态表单一样的东西,在其中管理员定义每个表单域。我设计了3个表:用于共享属性的主表,然后是将mainformID作为外键并定义每个表单字段的表单字段表。例如:
AutoID | FormID | FieldName
_____________________________
100 | Form1 | weight
101 | Form1 | height
102 | Form1 | color
103 | Form2 | Size
104 | Form2 | Type
....
至少有一个如下的表单值表:
FormFieldID | Value | UniqueResponseID
___________________________________________
100 | 50px | 200
101 | 60px | 200
102 | Red | 200
100 | 30px | 201
101 | 20px | 201
102 | Black | 201
103 | 20x10 | 201
104 | Y | 201
....
对于每个表单,我必须连接这3个表,以捕获所有字段和值。我想知道这是不是设计这样一个场景的唯一方法?它会降低sql性能吗?或者有没有更快更好的方法?
发布于 2014-01-06 03:34:47
我喜欢Branko的方法,它非常类似于我在过去创建的元数据模型,所以这篇文章是他的扩展。您可能想要添加一个数据类型表,它可以同时用于本机类型(int、varchar、bit、datetime等)。和你自己的定义(尽管我不认为这是即兴的)。
因此,Branko的"value“列变为:
value_tinyint tinyint
value_int整型
value_varchar varchar(xx)
等。
使用datatype_id (可能是tinyint)作为"mydatatype“表的外键。
请原谅缺乏像BD这样漂亮的ER图
mydatatype
datatype_id tinyint
代码varchar(16)
description varchar(64) --供参考
此扩展应:
a.在读取或写入数据时,为您节省了大量的类型转换
b.允许使用一些易于构造的动态SQL进行读写操作
此外(这可能超出了范围),您可能希望存储这些对象的创建/保存顺序,以及基于按钮按下/复选框/单选按钮选择等的条件显示。
我不会在这里详细介绍,因为我不确定你是否需要这些东西,但如果你需要这些东西,我会每隔一段时间检查一次,然后给你回复。
https://stackoverflow.com/questions/20934239
复制相似问题