1. 程式人生 > >如何設定外來鍵?

如何設定外來鍵?

什麼是外來鍵?
好好體會這句話:如果關係模式R中的某屬性集不是R的主鍵,而是另一個關係R1的主鍵則該屬性集是關係模式R的外來鍵,通常在資料庫設計中縮寫為FK。
看下面的例子。其中,公司代號這個屬性集不是第一張表的主鍵,而是第二張表中的主鍵,則公司代號這個屬性集是第一張表的外來鍵。

然後這個公司代號就成為了兩張表的相關聯絡。

外來鍵表示了兩個關係之間的相關聯絡。
作用:保持資料一致性,完整性
目的:主要目的是控制儲存在外來鍵表中的資料。 使兩張表形成關聯,外來鍵只能引用外表中的列的值或使用空值。

什麼屬性集才能夠有資格成為外來鍵呢?
首先,必須是關聯欄位,兩張表中都必須有的
其次,所有的鍵必須唯一。兩張表中,主鍵只有一個,外來鍵也必須只有一個。
再其次,外來鍵關聯的總是唯一的鍵欄位。也就是外來鍵只屬於一種屬性。

還要特別注意一點,2個或多個表的外來鍵,資料肯定要一致,如果一個表裡有,另一個木有,就不能增加外來鍵。
簡潔來講,意思就是:設定了外來鍵意味著兩張表之間有關聯了,不能隨意對一張表隨意定義內容,因為兩張表產生了關聯,要有都有,要沒有都沒有

該bbs專案設定外來鍵時,刪除和更新時的選項都選擇NO ACTION就能夠成功設定外來鍵

但同時,也因為上述原因,設定外來鍵會帶來諸多不便。
比如說,如果刪除一條記錄,兩張或多張關聯的表本來一致的內容被刪成不一致了。就肯定會報錯,如果我們引入刪除或者更新表的操作,在操作的過程中,就很容易出錯。

所以,公司內部的專案中一般不設定外來鍵,而是寫索引。
寫索引有這麼幾個作用:
1. 引入索引可以提升查詢速度;
2. 可以對不能重複的內容設定唯一索引,防止重複,比如使用者名稱,比如身份證號。

索引要怎麼寫呢?先不管。後續再寫!

知道怎麼寫了:

CREATE INDEX IX_USER_ID ONUSER(ID)

CREATE INDEX IX_USER_USERNAMEON USER(USERNAME)

CREATE INDEX IX_USER_PASSWORDON USER(PASSWORD)