SQL - 糟糕的设计选择?

时间:2013-02-18 18:59:02

标签: sql

请看下面的SQL:

create table DatasetToID(
    Dataset varchar(100), 
    ID INT, 
    Name varchar(100), 
    age varchar(100),
    primary key (dataset,id)
)

INSERT INTO DatasetToID VALUES ('Sales', 1, 'Ian Ratkin','30')
INSERT INTO DatasetToID VALUES ('Finance', 1, 'Bert Edwards','56')
INSERT INTO DatasetToID VALUES ('Production', 1, 'Marie Edwards','56')
INSERT INTO DatasetToID VALUES ('Sales', 2, 'Karen Bromley','30')
INSERT INTO DatasetToID VALUES ('Finance', 2, 'Steven Tardy','56')
INSERT INTO DatasetToID VALUES ('Production', 2, 'Eric Bishop','56')

create table Deletion(
    Dataset varchar(100), 
    ID INT, decision bit, 
    date datetime
)

INSERT INTO Deletion VALUES ('Sales', 1, 1, '2013-01-01')
INSERT INTO Deletion VALUES ('Finance', 2, 1, '2013-01-01')
INSERT INTO Deletion VALUES ('Sales', 1, 0, '2013-02-02')

我支持的实时系统是这样设计的。如果最近的删除决定(位)为真,则在每个月末从DatasetToID和Deletion中删除记录。在上述财务的情况下,2将被删除,但Sales,1将不会因为Sales,1最近的决定是0(false)。

我认为这是一个很糟糕的设计。我相信数据集和ID应该在不同的表中,例如不是DatasetToID。最初的开发者在他离开之前似乎不同意。如果我错了,我会徘徊。

1 个答案:

答案 0 :(得分:1)

这是一种非规范化设计,在这种工作的某些场景中很常见。特别是,每月删除或存档等定期例程应该不会影响您的架构设计。如果这是该密钥对之间唯一的重叠,那么我会说你的旧开发可能是正确的。但是,如果这两列在表格中一起显示,那么您可能是正确的,应该有一个主记录用于此配对。