慕標(biāo)琳琳
2019-08-16 17:23:28
非主鍵的外鍵我有一個保存數(shù)據(jù)的表,其中一行需要存在于另一個表中。所以,我想要一個外鍵來保持參照完整性。CREATE TABLE table1(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
AnotherID INT NOT NULL,
SomeData VARCHAR(100) NOT NULL)CREATE TABLE table2(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
AnotherID INT NOT NULL,
MoreData VARCHAR(30) NOT NULL,
CONSTRAINT fk_table2_table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID))但是,正如你所看到的,表我是外鍵,列不是PK。有沒有辦法創(chuàng)建這個外鍵,或者更好的方法來維護(hù)這種引用完整性?
3 回答

慕少森
TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個贊
正如其他人所指出的那樣,理想情況下,外鍵將被創(chuàng)建為對主鍵(通常是IDENTITY列)的引用。但是,我們并不是生活在一個理想的世界中,有時甚至對模式的“小”改變也會對應(yīng)用程序邏輯產(chǎn)生明顯的連鎖反應(yīng)。
考慮具有SSN列(和啞主鍵)的Customer表的情況,以及還包含SSN列的Claim表(由Customer數(shù)據(jù)中的業(yè)務(wù)邏輯填充,但不存在FK)。該設(shè)計存在缺陷,但已經(jīng)使用了好幾年,并且已經(jīng)在架構(gòu)上構(gòu)建了三種不同的應(yīng)用程序。顯而易見的是,剝離Claim.SSN并建立真正的PK-FK關(guān)系將是理想的,但也將是一次重大的改革。另一方面,對Customer.SSN設(shè)置UNIQUE約束,并在Claim.SSN上添加FK,可以提供參照完整性,對應(yīng)用程序影響很小或沒有影響。
不要誤解我,我都是為了正常化,但有時候?qū)嵱弥髁x勝過理想主義。如果可以通過創(chuàng)可貼幫助平庸的設(shè)計,可以避免手術(shù)。
添加回答
舉報
0/150
提交
取消