我想談談SQL Server中約束IDENTITY
的缺點。在我看來,這是有幫助的,但可能會導致與外鍵異常。SQL Server:IDENTITY約束的缺點
例子:
create table letters
(
ID int identity,
letter varchar(1)
)
現在我將創建兩個字母:
insert into letters (letter) values ('a');
insert into letters (letter) values ('b');
,並創建每個字母引用的表:
create table references
(
ID int identity,
ID_letter int references letters(ID),
value int
)
我希望有參考'b'字母,以便我:
insert into references (ID_letter,value) values (2,100)
但現在如果我刪除「A」和字母在另一個數據庫中執行「B」的插入,我必須更改參考1而不是2,因爲「B」現在ID爲1
這就是爲什麼我寧願使用名稱作爲主鍵和引用名稱,而不是ID標識。但是,對於較長的變種,例如城市來說,這並不容易 - 編寫城市的ID而不是全名更容易。你有什麼意見?
我不確定我是否理解這個問題,您是否試圖讓外鍵引用一個完全不同的數據庫? – 2014-10-06 11:16:09
「身份」本身並不是一個問題,它是自然與代理主鍵的永恆聖戰。兩種方法都有強弱兩面,所以一切都取決於你的特定情況。 – 2014-10-06 11:23:46
@jakub,我認爲你的問題真的是關於替代關鍵利弊。這個問題太廣泛了。見http://en.wikipedia.org/wiki/Surrogate_key – 2014-10-06 11:43:43