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