在SQL中存储动态表单数据,并以视图或存储过程的形式进行检索

问题描述

我们正在使用Blazor在ASP.NET Core中重新设计基于Delphi 7 Professional的产品。我们正在开发一种动态表单,允许用户将新的工作表类型添加到系统中,然后使用这些工作表类型。我们创造的DynForm。

我正在用Azure sql编写DynForm程序集的后端。以前,当将新字段添加到动态表单(Delphi应用程序)时,我们只是将新列追加到表单sql表中。这种增长方式已经失控了,所以我改为使用以下数据结构(我不想使用JSON来存储数据),因为从多个方向进行企业报告都需要此数据。

这仍然是理论上的问题,所以当我说自己有时,我就有了自己的设计...

我有下表;

  1. DynData_Values_Int
  2. DynData_Values_Money
  3. DynData_Values_DateTime
  4. 等...

然后我有一个存储过程,该存储过程首先通过DynForm设置表来构建结果集列,然后它将在适当的DynData_Values表中查找每个列的值。

我希望有百万种方法可以做到这一点,请问有人有做过的经验或这里有什么好主意吗?如果有的话,代码示例也很棒。

我真的很感激任何人花一点时间来回应这个古老的代码战士。我们中的一些人在DOS下很高兴,发生了什么:)!

解决方法

我怀疑使用nvarchar列来保存数据而不考虑源类型的方法最终将是正确的方法,除非出于某些原因您绝对必须按数据类型存储它们。还有一个前提类似的问题,因为有很多示例代码:SQL Server : Pivot with custom column names

过去我做过类似的事情,但是我使用了一个表,每个数据类型只有一列。不幸的是我没有代码了。控制表中的行包含有关响应是哪种数据类型的信息,因此我知道要使用响应表中的哪一列。它使SQL复杂化,但这是一种位于每种类型一个表和一个包含所有内容的列之间的方法。如果我要再次执行此操作,则会将每个表单提交都以JSON格式放入NVarChar列中,但是我知道那不是您想要的方向。

如果您对JSON毫无用处,请随时跳过其余内容;)

话虽这么说,JSON将会变得更简单。我不确定您是否正在考虑将整个表单提交放入NVarChar(Max)列中还是仅输入一个条目。如果您将整个提交内容放在其中,为什么不使用JSON格式? Azure SQL具有良好的JSON支持,因此,如果报表应用程序无法使用JSON格式的数据,则可以让它轻松地将其转换为JSON格式,而不必依赖报表应用程序。

您可以在JSON属性上建立索引,以在适当的情况下帮助加快查询速度。如果期望您的数据足够大,则启用columnstore indexes可能有助于数据压缩和性能。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...