我有一个Web应用程序,用户可以在其中动态创建数据表单。该应用程序位于ASP.NET中,后端使用MSSQL。为了创建表单,用户必须为表单指定字段。为了添加字段,用户必须指定字段标签,字段的类型,例如(数字,金额,电子邮件)和其他属性。以下是动态表单配置的示例
表单名称:销售
字段标签:客户名称 字段类型:文字 长度:100
字段标签:金额 字段类型:money
我希望你能得到这个要点。可以有许多这样的形式。每个表单可以有数千行。字段配置存储在具有如下架构的表中:
表格:数据类型 列: DataTypeId int,DataTypeName varchar(100)
表: FormFields 列: FieldId int,FieldLabel varchar(100),DataTypeId int
我可以通过两种方式将表单值存储在数据库中。
方法1:将数据存储在静态表中作为键值对。使用这种方法,我的表格如下所示:
表: FormFieldValues 列: FieldId int,Numeric_value numeric(18,5),Text_Value varchar(500),Money_Value money
因此,FormFieldValues表中的一行将如下所示
字段ID | Numeric_Value | Text_Value | MONEY_VALUE
1 100.512
2 John Wayne
3 $ 200.50
这种方法的优点是,由于表结构是静态的,因此在获取行时不需要动态SQL。缺点是在代码中将行转换为列。
方法2 :使用字段配置,即时创建动态表。所以在上面的例子中,我可以创建一个表,如下所示
表格:Form1 列:Id int,CustomerName varchar(100),金额,版本数字(15,5)
此表格中的一行如下所示
客户名称|金额|版本
John Wayne $ 200.50 100.512
此方法的优点是,每个列都是根据字段配置中指定的精确精度创建的。缺点是需要动态SQL来获取数据并存储它。
哪种方法更好?从长远来看,哪种方法更具可扩展性和性能友好性?
注意:SO不支持表格格式,因此表格可能看起来不合适但我希望读者能够获得要点