① 資料庫中的鍵、主碼、主鍵是什麼意思
主鍵(Primarykey):也稱為主碼或主關鍵字,用於惟一地確定一個元組的屬性或屬性組(復合主碼)。每個關系都有一個並且只有一個主碼。
外鍵(ForeignKey):也稱為外碼或外部關鍵字。如果一個屬性集不是所在關系的關鍵字,但是是其他關系的關鍵字,則該屬性集稱為外部關鍵字。
在關系資料庫中可以通過外鍵使兩個關系關聯,這種聯系通常是一對多(1:n)的,其中主(父)關系(1方)稱為被參照關系,從(子)關系(n方)稱為參照關系。
(1)資料庫為什麼要有主碼擴展閱讀:
資料庫主鍵作用:
1、保證實體的完整性
2、加快資料庫的操作速度
3、在表中添加新記錄時,DBMS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復。
4、DBMS自動按主鍵值的順序顯肢則薯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
在有些資料庫中,雖然主鍵不是必需的,但最好為每個表都設置一個主鍵,不管是單主鍵還是復合主鍵。它存在代表著表結構的完整性歷者,表的記錄必須得有唯一區分的欄位,主鍵主要是用於其他表的外鍵關聯,以及本記錄的修改盯備與刪除。
② 主碼和外碼各有什麼作用
1、主碼:保證實體的完整性;加快資料庫的操作速度;在表中添加新記錄時,ACCESS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復;ACCESS自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
2、外碼:主碼和外部碼提供了一種表示不同關系之間相互關聯的手段。如關系模式供應商和供應之間的關系就是通過供應商名稱來體現的。
建立主碼應該遵循的原則
1、主鍵應當是對用戶沒有意義的。如果用戶看到了一個表示多對多關系的連接表中的數據,並抱怨它沒有什麼用處,那就證明它的主鍵設計地很好。
2、永遠也不要更新主鍵。實際上,因為主鍵除了唯一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對用戶無意義的原則被違反了。
註:這項原則對於那些經常需要在數據轉換或多資料庫合並時進行數據整理的數據並不適用。
3、主鍵不應包含動態變化的數據,如時間戳、創建時間列、修改時間列等。
4、主鍵應當由計算機自動生成。如果由人來對主鍵的創建進行干預,就會使它帶有除了唯一標識一行以外的意義。一旦越過這個界限,就可能產生人為修改主鍵的動機,這樣,這種系統用來鏈接記錄行、管理記錄行的關鍵手段就會落入不了解資料庫設計的人的手中。
以上內容參考:網路-主關鍵字、網路-外部碼
③ 什麼是候選碼、主碼、全碼、外碼
候選碼、主碼、全碼和外碼都是關系資料庫中重要的概念,用於描述數據表的屬性和關系。
候選碼是一個或多個屬性的集合,可以用來唯一標識表中的每個元組(記錄)。換句話說,候選碼確保表中的每個記錄都可以被唯一地區分。一個表可以有多個候選碼。
主碼是從候選碼中選出的一個用於唯一標識表中每個元組的屬性集合。因此,主碼一定是候選碼,但候選碼不一定是主碼。每個表只能有一個主碼。
全碼是指包含所有屬性的候選碼。換句話說,如果一個候選碼包含表中的所有屬性,那麼它就是一個全碼。
外碼是一個表中的屬性集合,它對應於另一個表的主碼。外碼用於表示表之間的關系。例如,在一個訂單管理系統中,訂單表可能包含一個客戶ID的外碼,該外碼與客戶表的主碼關聯,以表示每個訂單與特定客戶的關系。
以下是一個簡單的例子來說明這些概念。考慮一個包含學生信息的學生表,其中的屬性包括學號、姓名、性別和年齡。在這個表中,學號和姓名都可以作為候選碼,因為它們都可以唯一標識每個學生。然而,我們只能選擇一個作為主碼,比如學號。如果我們將姓名作為主碼,那麼在輸入學生的信息時,就必須確保每個學生的姓名都是唯一的,這在實際應用中可能是困難的。在這個例子中,沒有全碼,因為沒有任何一個候選碼包含表中的所有屬性。另外,如果還有一個課程表,其中包含課程編號、課程名和授課老師等屬性,那麼我們可以在學生表中添加一個課程編號的外碼,以表示每個學生所選的課程。
總之,候選碼、主碼、全碼和外碼是關系資料庫中重要的概念,用於確保數據的唯一性和完整性,以及表示表之間的關系。