本篇文章主要介紹MySQL資料庫中超鍵、候選鍵、主鍵、主屬性、外鍵的具體定義與用處。以下內容詳解也可以參考PHP中文網的MySQL影片教學和MySQL手冊。
首先看看各種鍵的定義:
超鍵(super key):在關係中能唯一標識元組的屬性集稱為關係模式的超鍵
#候選鍵(candidate key):不含有多餘屬性的超鍵稱為候選鍵
主鍵(primary key):使用者選為元組標識的一個候選鍵程式主鍵
#外鍵(foreign key)如果關係模式R1中的某屬性集不是R1的主鍵,而是另一個關係R2的主鍵則該屬性集是關係模式R1的外鍵。
結合實例的具體解釋:
假設有以下兩個表:
学生(学号,姓名,性别,身份证号,教师编号) 教师(教师编号,姓名,工资)
超鍵:
由超鍵的定義可知,學生表中含有學號或身分證號的任意組合都為此表的超鍵。如:(學號)、(學號,姓名)、(身分證號,性別)等。
候選鍵:
候選鍵屬於超鍵,它是最小的超鍵,就是說如果再去掉候選鍵中的任何一個屬性它就不再是超鍵了。學生表中的候選鍵為:(學號)、(身分證號)。
主鍵:
主鍵就是候選鍵裡面的一個,是人為規定的,例如學生表中,我們通常會讓「學號」做主鍵,教師表中讓「教師編號”做主鍵。
外鍵:
外鍵比較簡單,學生表中的外鍵就是「教師編號」。外鍵主要是用來描述兩個表的關係。
主屬性和主鍵
嚴格來說主屬性:指主鍵列,即主鍵由一列構成主鍵定義:能夠唯一標識一個元組的屬性或屬性集,即可以由多列組成。
在教學中,大多數實例都是主鍵由一列構成,所以也可以簡單地說主屬性與主鍵沒有什麼不同。
第一範式(1NF)
第一範式是指資料庫表的每一列都是不可分割的基本資料項,在同一列中不能有多個值,即實體中的某個屬性不能有多個值或不能有重複的屬性這就是第一範式的基本概念。
什麼意思呢,舉個例子,在一個表裡有一個「電話」字段,其值既有手機號,又有座機號 那麼這樣就不符合第一範式的要求了。此時應該將「電話」拆分為「手機」跟「座機」 這樣一來就變成了一個符合第一範式的資料表了。
總結:欄位不能再分。
第二範式(2NF)
第二範式是在第一範式的基礎上建立起來的,即滿足第二範式必須先滿足第一範式。第二範式要求資料庫表中的每個實例或行必須可以被惟一的區分。為實現區分,通常需要為表加上一個列,以儲存各個實例的惟一標識,要求實體的屬性完全依賴主鍵。要討論一個表符不符合第二範式的前提是,這個表的主鍵為組合主鍵,如果不是組合主鍵那就談不上符不符合第二範式了。
總結:不能部分依賴,就是說當一個表格有組合主鍵時,其他非主鍵的欄位必須完全依賴主鍵。
第三範式(3NF)
第三範式是要符合第二範式,第三範式就是一個資料表中不能存在其他資料表中的非主鍵字段,也就是說如果存在其他表中的字段,就一定得是那個表的主鍵。
假如一個表格有a b c三個字段,a—>b b—>c。那麼c與a就是傳遞依賴,這樣就不符合第三範式。而且不管a能不能直接確定c都屬於傳遞依賴,所以只有b跟c不依賴a以外的任何字段才符合第三範式。
總結:不可以有傳遞依賴,就是說主鍵以外的欄位必須依賴主鍵 而不能依賴其他欄位。
以上是資料庫中超鍵、主鍵、外鍵等的定義用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!