-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')

私がサポートするライブ システムは、このように設計されています。最新の削除決定 (ビット) が true の場合、毎月末に DatasetToID および Deletion からレコードが削除されます。上記の場合、Finance,2 は削除されますが、Sales,1 は最新の決定が 0 (false) であるため削除されません。

これは非常に貧弱な設計だと思います。Dataset と ID は、DatasetToID ではなく、別のテーブルにある必要があると思います。元の開発者は、去る前に同意しなかったようです。私が間違っている場合、私はさまよっています。

4

1 に答える 1

1

これは、この種の作業の一部のシナリオで一般的な非正規化設計です。特に、毎月の削除やアーカイブなどの定期的なルーチンは、実際にはスキーマの設計に影響を与えるべきではありません。これがそのキーペア間の唯一の重複である場合、古い開発者はおそらく正しかったと言えます。ただし、これら 2 つの列がテーブルに一緒に表示される場合は、おそらく正しいでしょう。このペアリングにはマスター レコードが必要です。

于 2013-02-18T19:05:53.280 に答える