2023-04-03熱點候選碼和主碼的關系,主碼和外碼的關系一樣嗎
大家好,小編來為大家解答以下問題,候選碼和主碼的關系,主碼和外碼的關系一樣嗎,候選碼和主碼的關系,主碼和外碼的關系是什么,現在讓我們一起來看看吧!
主碼包含候選碼和碼,候選碼包含碼。
1、含義不同:若關系中的某一屬性組的值能唯一地標識一個元組,則稱該屬性組為候選碼;若一個關系有多個候選碼,其中任何一個都可以做主碼,主碼的諸屬性就稱為主屬性;一個表中如果有一個字段,存儲另外一個表的主鍵,這個字段就是外鍵,又稱外碼。
2、實際操作不同:碼是可以確定一個元組的所有信息的屬性名或屬性名組。
例如在{a,b,c,d}中,假設知道a的值就能確定a,b,c,d的值,假設知道c,d的值就可以確定a,b,c,d的值,那么{a}就是碼,{c,d}就是碼。
并且{a,b},{a,c},{a,b,c},{a,b,c,d}等也都是碼,因為它們也可以確定一個元組的所有值,即使很多余。
候選碼的真子集中不存在碼,候選碼可以有多個。
就上面的例子而言,{a}是候選碼,{c,d}是候選碼,因為它們的真子集中不存在碼。
而諸如{a,b}并不是候選碼,因為它的真子集中含有{a},且{a}是碼。
主碼就是主鍵的意思,主碼是任意一個候選碼,還是上面的例子,主碼是候選碼{a},{c,d}中的其中一個,既可以是{a},也可以是{c,d}。
3、定義概念不同:碼是數據系統中的基本概念。所謂碼就是能唯一標識實體的屬性,他是整個實體集的性質,而不是單個實體的性質。它包括超碼,候選碼,主碼。
超碼是一個或多個屬性的集合,這些屬性可以讓我們在一個實體集中唯一地標識一個實體。如果K是一個超碼,那么K的任意超集也是超碼,也就是說如果K是超碼,那么所有包含K的集合也是超碼。
候選碼是從超碼中選出的,自然地候選碼也是一個或多個屬性的集合。因為超碼的范圍太廣,很多是我們并不感興趣即無用處的。
所以候選碼是最小超碼,它們的任意真子集都不能成為超碼。例如,如果K是超碼,那么所有包含K的集合都不能是候選碼;如果K,J都不是超碼,那么K和J組成的集合(K,J)有可能是候選碼。
按照上面碼的定義看看外碼的定義如下:
設F是基本關系R的一個或者一組屬性,但不是關系R的碼。K(s)是基本關系S的主碼。如果F與K(s)相對對應,則稱F是R的外碼。
綜上:F是非主屬性組,必定可以取空值,但是課本例子包括課后題都說F可以是主屬性,當為主屬性時,為了保持實體完整性,不可以取空值。
擴展資料:
碼=超鍵:能夠唯一標識一條記錄的屬性或屬性集。
標識性:一個數據表的所有記錄都具有不同的超鍵;非空性:不能為空;有些時候也把碼稱作“鍵”。
候選鍵=候選碼:能夠唯一標識一條記錄的最小屬性集;標識性:一個數據表的所有記錄都具有不同的候選鍵;
最小性:任一候選鍵的任何真子集都不能唯一標識一個記錄(比如在成績表中(學號,課程號)是一個候選鍵,單獨的學號,課程號都不能決定一條記錄)。
非空性:不能為空;候選鍵是沒有多余屬性的超鍵;舉例:學生ID是候選碼,那么含有候選碼的都是碼,少部分地方也有叫超級碼的,但是見得不多。
主鍵=主碼:某個能夠唯一標識一條記錄的最小屬性集(是從候選碼里人為挑選的一條)。
唯一性:一個數據表只能有一個主鍵;標識性:一個數據表的所有記錄都具有不同的主鍵取值;
非空性:不能為空;人為的選取某個候選碼為主碼。
參考資料:百度百科-數據庫
候選碼:若關系中的一個屬性或屬性組的值能夠唯一地標識一個元組,且他的真子集不能唯一的標識一個元組,則稱這個屬性或屬性組做候選碼。
主碼:主碼一般指主關鍵字。主關鍵字是表中的一個或多個字段,它的值用于唯一地標識表中的某一條記錄。在兩個表的關系中,主關鍵字用來在一個表中引用來自于另一個表中的特定記錄。
全碼:All-key關系模型的所有屬性組組成該關系模式的候選碼,稱為全碼。即所有屬性當作一個碼。若關系中只有一個候選碼,且這個候選碼中包含全部屬性,則該候選碼為全碼。
外碼:某個關系的主碼相應的屬性在另一關系中出現,此時該主碼在就是另一關系的外碼。
擴展資料:
主碼作用:
1、保證實體的完整性;
2、加快數據庫的操作速度;
3、在表中添加新記錄時,ACCESS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復;
4、ACCESS自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
參考資料:百度百科-候選碼
? ? ? ? ? ? ? ?百度百科-主碼。
一、含義不同:
主碼唯一標識,候選碼是可以作為主碼的碼,主碼一定是候選碼的子集,但候選碼不一定是主碼。
二、作用不同:
主碼:被數據庫設計者選中的,用來在同一實體集中區分不同實體的候選碼;此外,應該選擇哪些從不或極少變化的屬性;
候選碼:如果任意超碼的真子集不能包括超碼,則稱其為候選碼;超碼包括候選碼;
建立主鍵應該遵循的原則
主鍵應當是對用戶沒有意義的。如果用戶看到了一個表示多對多關系的連接表中的數據,并抱怨它沒有什么用處,那就證明它的主鍵設計地很好。
永遠也不要更新主鍵。實際上,因為主鍵除了唯一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對用戶無意義的原則被違反了。
以上內容參考:百度百科-主關鍵字。
普通C語言中不存在這幾種碼,只有數據庫sql C存在:
(1) 候選碼(Candidate key)
在關系模式R(U)中,K為R的一個屬性或者一組屬性,若滿足K→U,則K為關系模式R的候選碼(Candidate key)。
候選碼是一組非空的屬性名集合,每個屬性必須為該關系模式的屬性。
在關系模式R(U)中,包含在任何一個候選碼中的屬性稱為主屬性(prime Attribute)。不包含在任何候選碼中的屬性稱為非主屬性(Nonprime Attribute)或非碼屬性。
最簡的情況下,單個屬性是候選碼。最極端的情況,所有的屬性的組合構成碼。如果整個屬性組U是碼,則稱為全碼。例如,在關系模式供應商(供應商名稱,供應商地址,供應商電話)中,供應商名稱是唯一的候選碼。而在關系模式供應(供應商名稱,供貨名稱,供應單價)中,屬性的組合(供應商名稱,供貨名稱)是唯一的候選碼。
關系模式的每個候選碼具有下列兩個特性:
· 唯一性:在關系模式R(U)中, 設K為關系模式R的候選碼,則對于關系模式R的任何一個關系實例r中,任何時候都不存在候選碼屬性值相同的兩個元組。即候選碼的值唯一的決定元組的所有屬性值,即r中的任意2個元組s和t,都有s[k]不等于t[k] 。
· 最小特性:在不破壞唯一性的情況下,沒有任何屬性可以從候選碼屬性集中刪除。即候選碼是由其值唯一決定元組值的最小屬性集組成。
例如:在供應關系中,必須由供應商名稱和供貨名稱兩者組合才能唯一的決定供應關系中的一個元組值,缺一不可。
下面給出一個具有多個候選碼的例子。有關系模式CSZ(CITY,ST,ZIP),其中有三個屬性:城市為CITY,街道ST,郵政編碼ZIP。其屬性集合和屬性間的函數函數依賴關系為:
U = { CITY,ST,ZIP } 。
F = {(CITY,ST)→ZIP,ZIP→CITY} 。
即城市和街道共同決定郵政編碼,郵政編碼決定城市。在這個關系模式中,有兩個候選碼,即(CITY,ST)和(ST,ZIP)。CITY,ST和ZIP都是主屬性。
再給出一個全碼的例子,如表5-2。我們有一個大部件的設計A,其中包含四個設計相同的左右并排放置的子部件,四個子部件的編號由左到右分別為I1,I2,I3和I4。設計一個關系模式描述四個子部件之間的左右鄰接關系,關系模式左右鄰接(左鄰接部件,右鄰接部件)。這個關系模式的唯一的候選碼就是(左鄰接部件,右鄰接部件),即全碼。
表 5-2
左鄰接部件 左鄰接部件
I1 I2
I2 I3
I3 I4
在左右鄰接關系中,必須由左鄰接部件和右鄰接部件共同決定其中的一個元組。
(2)主碼(Primary Key) 。
在一個關系模式中,可以有多個候選碼,但只能有一個主碼。
若關系模式R(U)中有多個候選碼,則選定其中的一個候選碼作為主碼,或稱主關鍵字。
例如,在關系模式供應商(供應商名稱,供應商地址,供應商電話)中,供應商名稱是唯一的候選碼,也是它的主碼。而在關系模式供應(供應商名稱,供貨名稱,供應單價)中,屬性的組合(供應商名稱,供貨名稱)是唯一的候選碼,也是它的主碼。在這個關系模式CSZ中,有兩個候選碼,即(CITY,ST)和(ST,ZIP),可以任選其中一個作為主碼。在左右鄰接關系中,關系模式的唯一的候選碼(左鄰接部件,右鄰接部件)也是它的主碼。
(3)外碼
關系模式R中屬性或屬性組X并非R的候選碼,但X是另一個關系模式的候選碼,則稱X是R的外部碼(Foreign Key),也稱外碼。
例如:在供應關系模式中,供應商名稱不是供應關系模式的碼,但供應商名稱是關系模式供應商的碼,則稱供應商名稱是關系模式供應的外部碼或外碼。
主碼和外部碼提供了一種表示不同關系之間相互關聯的手段。如關系模式供應商和供應之間的關系就是通過供應商名稱來體現的。
主碼唯一標識,候選碼是可以作為主碼的碼,主碼一定是候選碼的子集,但候選碼不一定是主碼。
主碼:被數據庫設計者選中的,用來在同一實體集中區分不同實體的候選碼;此外,應該選擇哪些從不或極少變化的屬性;
候選碼:如果任意超碼的真子集不能包括超碼,則稱其為候選碼;超碼包括候選碼;
所有碼都是一個集合,所有可以用來在實體集中標識唯一實體的集合,都是超碼。如果任意超碼的真子集不能包括超碼,則稱其為候選碼。被數據庫設計者選中的,用來在同一實體集中區分不同實體的候選碼。超碼包括候選碼,候選碼包括主碼。
拓展資料
1、若關系中的某一屬性或屬性組的值能唯一的標識一個元組,而其任何、子集都不能再標識,則稱該屬性組為(超級碼)候選碼。
2、例如:在學生實體中,“學號”是能唯一的區分學生實體的,同時又假設“姓名”、“班級”的屬性組合足以區分學生實體,那么{學號}和{姓名,班級}都是(超級碼)候選碼。
3、簡單的說,候選碼(超級碼)就是可以被選為主碼的屬性或屬性組。當一個關系有N個屬性或屬性組可以唯一標識時,則說明該關系有N個候選碼,可以選定其中一個作為主碼。
4、候選碼中出現過的屬性稱為主屬性;非主屬性就是不包含在任何候選碼中的屬性。
5、例如:關系 工人(工號,身份證號,姓名,性別,部門).顯然工號和身份證號都能夠唯一標示這個關系,所以都是候選碼。工號、身份證號這兩個屬性就是主屬性。如果主碼是一個屬性組,那么屬性組中的屬性都是主屬性。
參考資料:百度百科:候選碼
主碼和外碼是用來實現參照完整性的,外碼的數據項需參照主碼的數據項來操作。具體實現是在創建數據庫時為表間創立關系。如:
三個關系:
學生信息表(學號、姓名、性別、出生年月、籍貫、所屬學院) //學號 是主鍵(主碼。
課程表(課程號,課程名稱,學分) //課程號 是主鍵(主碼。
成績表(學號,課程號,成績) //學號 是外碼;課程號 是外碼。
“成績表”(從表)的學號參照“學生信息表”(主表)的學號來錄入。1、也就是主表里面沒有的學號,從表里面不能有,外碼參照主碼錄入;2、級聯操作,即當刪除、修改某個主表里面的學號時,從表里面的那個學號會相應的自動刪除、修改。外碼參照主碼操作。
課程號的參照關系同理。
1、主碼:保證實體的完整性;加快數據庫的操作速度;在表中添加新記錄時,ACCESS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復;ACCESS自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
2、外碼:主碼和外部碼提供了一種表示不同關系之間相互關聯的手段。如關系模式供應商和供應之間的關系就是通過供應商名稱來體現的。
建立主碼應該遵循的原則
1、主鍵應當是對用戶沒有意義的。如果用戶看到了一個表示多對多關系的連接表中的數據,并抱怨它沒有什么用處,那就證明它的主鍵設計地很好。
2、永遠也不要更新主鍵。實際上,因為主鍵除了唯一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對用戶無意義的原則被違反了。
注:這項原則對于那些經常需要在數據轉換或多數據庫合并時進行數據整理的數據并不適用。
3、主鍵不應包含動態變化的數據,如時間戳、創建時間列、修改時間列等。
4、主鍵應當由計算機自動生成。如果由人來對主鍵的創建進行干預,就會使它帶有除了唯一標識一行以外的意義。一旦越過這個界限,就可能產生人為修改主鍵的動機,這樣,這種系統用來鏈接記錄行、管理記錄行的關鍵手段就會落入不了解數據庫設計的人的手中。
以上內容參考:百度百科-主關鍵字、百度百科-外部碼。
主碼與外碼
只是相對不同的表來說的,
某欄位(如id)對 本身表來說是主鍵或者主碼,
如果該表含有其它表的主鍵比如(pid),那么這欄位(pid) 就叫外鍵或外碼。
1、創建主鍵測試表test_key_p,
create table test_key_p(id number, class_id number);。
2、創建兩一個主鍵測試表test_key_f,class_id字段作為test_key_p表的外鍵,
create table test_key_f(class_id number, class_name varchar2(20));。
3、編寫sql,添加主鍵、外鍵,
-- Create/Recreate primary, unique and foreign key constraints。
alter table TEST_KEY_P add constraint p_key1 primary key (ID);。
alter table TEST_KEY_P add constraint f_key2 foreign key (CLASS_ID) references test_key_f (CLASS_ID);。
4、查看主鍵、外鍵信息,ID為primary即主碼,CLASS_ID為foreign即外碼,
主碼和候選碼都是用來唯一標識關系的。一個關系中可以有多個候選碼,只需選其中之一作為主碼,主碼里包含的屬性叫做主屬性。舉個例子 學生表中:屬性:學號、姓名...。