2013-02-18 83 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

相關問題