由於各種原因,我決定使用代理鍵(以種子身份的形式)。我的問題來自強制數據的唯一性。例如,以我創建數據庫的場景將所有書籍存儲在庫中。SQl設計問題。唯一索引/約束與代理鍵
isbn是分配給來自書籍出版世界某些魔術來源的所有書籍的唯一標識符。如果這本書是印刷的,那麼它有1個isbn,如果它是電子的,那麼它有另一個ISBN。
我們無法強制實施ISBN的唯一性,而無需將uniqueIndex覆蓋printedISBN和ElectronicISBN列。我的具體問題是,我們有這種類型的場景,我們需要強制實現數據的唯一性,但是我們使用的是代理主鍵,唯一的方法是強制實施數據唯一性,方法是在列上添加唯一索引喜歡執行。 這似乎與直覺相反,因爲如果我們在整個設計中遵循代理鍵方法,每個表都會有一個代理主鍵和一個唯一索引?這看起來很糟糕,我覺得我的設計技巧還不夠強大,找不到「正確的答案」。這些情況下的答案是什麼?
BookID INT IDENTITY (1,1) not null,
Title varchar(25) not null,
Author varchar(25) not null,
PrintISBN char(13) not null,
ElectronicISBN char(13) not null
一個可能的答案是,您將ISBN詳細信息標準化爲另一個表格,BookID,ISBN,ISBNType,OtherMeta字段 - 然後在ISBN上放置一個唯一約束。 – Andrew
是有意義的。主鍵爲isbn有一列是isbn型,然後有typeID,ISBN型的另一個表。這可以讓我把任何類型的指導都放在那裏,只要我把它與以下類型聯繫起來,所以如果他們提出「isbnMark」版本,我可以很容易地適應它。 – gh9