SQL-动态字段名映射

时间:2019-12-11 19:00:26

标签: sql sql-server database tsql sql-server-2012

示例数据表:

CREATE TABLE [dbo].[SourceTable]
    (
        [Col1] INT            NOT NULL
      , [Col2] BIGINT         NOT NULL
      , [Col3] VARCHAR(10)    NOT NULL
      , [Col4] BIT            NOT NULL
      , [Col5] DATETIME2      NOT NULL
      , [Col6] DECIMAL(18, 6) NOT NULL
      , [Col7] TIMESTAMP      NOT NULL
    ) ;

目标: 我有25个字段的数据表。可以添加新字段,可以删除旧字段,或者可以修改现有字段(名称,数据类型和其他属性)。

我们有7个部门,每个部门都可以选择并选择要在报告中(通过前端)输出的字段。部门选择的任何字段都应映射到该部门。他们应该能够随时随地修改其选择(例如,一个月后,将新字段添加到表中,他们可以返回并将该字段添加到他们的选择中,取消选择现有字段,等等)。

最好的设计方式是什么?

我们可以有一个表dbo.DeptField(DeptId INT NOT NULL,FieldName sysname NOT NULL),它看起来像

DeptId      FieldName
1               Col1
1               Col3
1               Col5
2               Col1
2               Col2
3               Col6
5               Col1
5               Col2
5               Col3
5               Col4
5               Col5
5               Col6

现在,我们将现有字段重命名或删除(例如,“ Col5”重命名为“ ColNew”)。根据上述示例数据,我们已经将两个部门映射到“ Col5”。在主表中修改字段名称后,当报表查询运行并查找“ Col5”字段时,将找不到它。

对于这样的“字段选择器”任务,这是否是一个好的数据库设计?如果没有,我该怎么做才能更有效/可扩展地实现最终目标?如果可以的话,我可以实施哪种验证,以使事情在最后阶段不会中断(导出报告)?

0 个答案:

没有答案