我们正在ASP中重新设计基于Delphi 7 Professional的产品。NET核心使用Blazor。我们正在开发一种动态表单,允许用户向系统中添加新的工作表类型,然后使用这些工作表类型。我们创造的DynForm。
我正在Azure SQL中编写DynForm程序集的后端。以前,当一个新字段被添加到动态表单(Delphi应用程序(时,我们只需在表单SQL表中添加一个新列。这种情况已经失控,所以我使用以下数据结构(我不想使用JSON来存储数据(,因为这些数据是企业从多个方向进行报告所必需的。
这仍然是理论上的,所以当我说我有,我的设计。。。
我有以下表格;
- DyData_Values_Int
- DyData_Values_Money
- DyData_Values_DateTime
- 等等
然后我有一个存储过程,它首先通过DynForm设置表来构建结果集列,然后它将在相应的DynData_Values
表中查找每个列的值。
我预计有一百万种方法可以做到这一点,有人有自己做这件事的经验吗?或者这里有什么好主意吗?如果你有代码示例的话,代码示例就非常棒。
我真的很感激任何人花点时间来回应这个古老的代码战士。我们中的一些人在DOS下很开心,发生了什么:(!
我怀疑,无论源类型如何,使用nvarchar列来保存数据的方法最终都是正确的,除非出于某种原因,必须按数据类型存储数据。还有另一个类似前提的问题可能会对您有所帮助,因为有大量的示例代码:SQL Server:Pivot带有自定义列名
我以前也做过类似的事情,但我使用了一个表,每个数据类型有一列。不幸的是,我已经没有代码了。控制表中的行有关于响应的数据类型的信息,所以我知道应该使用响应表中的哪一列。它使SQL复杂化,但它是一种介于每种类型一个表和包含所有内容的一列之间的方法。如果我再做一次,我会把每个表单提交都放在JSON格式的NVarChar列中,但我知道这不是你想要的方向。
如果您对JSON一筹莫展,请随意跳过其余部分;(
话虽如此,JSON将变得更加简单。我不确定您是在考虑将整个表单提交到NVarChar(Max(列中,还是只考虑一个条目。如果你把整个提交都放在那里,为什么不使用JSON格式呢?Azure SQL具有良好的JSON支持,因此如果您的报告应用程序无法使用JSON格式的数据,您可以让它执行提升操作,使其进入和退出JSON格式,而不是依赖它们。
您可以在适当的时候对JSON属性进行索引,以帮助加快查询速度。如果您的数据预计会变得足够大,那么启用列存储索引可能有助于提高数据压缩和性能。