2013-02-18 46 views
-1

请看看下面的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将被删除,但销售,1不会因为销售,1最近的决定是0(错误)。

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

+1

在我看来是的。数据库中的数据集应使用外键标准化。 – harsh8888 2013-02-18 19:04:08

+0

从数据中,ID似乎是* DataSet中的序列号*。你会选择什么样的结构? – 2013-02-18 19:04:29

+0

一个好的数据库设计是一门艺术,我自己支持几个系统,而差的db设计很常见 – Machinegon 2013-02-18 19:04:38

回答

1

这是一个非规范化设计,在这类工作的某些场景中很常见。特别是,像月度删除或存档这样的周期性例程应该不会影响您的模式设计。如果这是该密钥对之间的唯一重叠,那么我会说你的老开发者可能是对的。但是,如果这两列在表格中一起出现在表格中,那么您可能是对的,应该有这个配对的主记录。

+0

非常感谢+1,你的第一个感觉就是他所说的。当然,非规范化设计和非规范化设计有区别吗? – w0051977 2013-02-18 19:10:11

+0

第一个表是非规范化的?你有替代品吗? – 2013-02-18 19:13:53

+0

@darius,我相信我们是非正常化的删除表。 – w0051977 2013-02-18 20:22:40

相关问题