-1

请看下面的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 和删除中删除记录。在上述 Finance 的情况下,将删除 Sales,1,但不会删除 Sales,1,因为 Sales,1 最近的决定是 0(假)。

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

4

1 回答 1

1

这是一种非规范化的设计,在这种工作的某些场景中很常见。特别是,像每月删除或归档这样的定期例程实际上不应该影响您的架构设计。如果这是该密钥对之间的唯一重叠,那么我会说您的旧开发人员可能是正确的。但是,如果这两列一起出现在表格中,那么您可能是对的,应该有一个主记录来进行配对。

于 2013-02-18T19:05:53.280 回答