資料庫主鍵外來鍵區別

2021-07-28 17:47:03 字數 3849 閱讀 5679

從資料庫是主資料庫的備份,當主資料庫變化時從資料庫要更新,這些資料庫軟體可以設計更新週期。這是提高資訊保安的手段。主從資料庫伺服器不在乙個地理位置上,當發生意外時資料庫可以儲存。

主外來鍵的關係結構:

1,一對一,不用引用主外來鍵,把它們放乙個表中即可

例如:乙個學生只能有乙個卡號,那麼學生跟卡號放在乙個表中即可

2,一對多,引用主外來鍵,『一』相當於主鍵,『多』即是引用主鍵的外來鍵。

例如:乙個班級可以有多個學生,並且乙個學生只能屬於乙個班級,這就是一對多的關係;

3,多對多關係,需要建立乙個表,表中需要兩個字段,分別是引用,兩個多對多字段主鍵的外來鍵。

例如:學生表(學號,姓名,…………)主鍵:學號

課程表(課程號,課程名,…………)主鍵:課程號

乙個學生能選多門課,乙個課可以由多個學生選,即是多對多關係,

那麼成績表就是它們之間關係的體,

即引用成績表(學號,課程號,成績)。這裡學號和課程號,分別是學生表和課程表中學號和課程號的外來鍵

在我們現在這個階段中,主要還是使用,主外鍵間的一對多的關係

主鍵primary key,唯一標示乙個實體。是保證資料庫的實體完整性,保證資料中資料的正確性和合理性,取值非空唯一。

外來鍵foreign,是用來使表與表之間聯絡。用來保證資料庫的參照完整性,外來鍵的取值必須來自參照表參照列的值,可以為空也可不為空。

外來鍵的作用:

保持資料一致性,完整性,主要目的是控制儲存在外鍵表中的資料。 使兩張表形成關聯,外來鍵只能引用外表中的列的值!

一、什麼是主鍵、外來鍵

關係型資料庫中的一條記錄中有若干個屬性若其中某乙個屬性組(注意是

組)能唯一標識一條記錄該屬性組就可以成為乙個主鍵 

比如 學生表(學號姓名性別班級) 

其中每個學生的學號是唯一的學號就是乙個主鍵 

課程表(課程編號,課程名,學分) 

其中課程編號是唯一的,課程編號就是乙個主鍵 

成績表(學號,課程號,成績) 

成績表中單一乙個屬性無法唯一標識一條記錄學號和課程號的組合才可

以唯一標識一條記錄所以學號和課程號的屬性組是乙個主鍵 

成績表中的學號不是成績表的主鍵但它和學生表中的學號相對應並且

學生表中的學號是學生表的主鍵則稱成績表中的學號是學生表的外來鍵 

同理成績表中的課程號是課程表的外來鍵 

定義主鍵和外來鍵主要是為了維護關聯式資料庫的完整性總結一下 

1.主鍵是能確定一條記錄的唯一標識比如一條記錄包括身份正號姓

名年齡。 

身份證號是唯一能確定你這個人的其他都可能有重複所以身份證號

是主鍵。 

2.外來鍵用於與另一張表的關聯。是能確定另一張表記錄的字段用於保持

資料的一致性。 

比如a表中的乙個字段是b表的主鍵那他就可以是a表的外來鍵。

二、主鍵、外來鍵和索引的區別

主鍵、外來鍵和索引的區別? 

主鍵外來鍵索引 

定義唯一標識一條記錄不能有重複的不允許為空表的外來鍵是另一表

的主鍵,外來鍵可以有重複的,可以是空值該欄位沒有重複值但可以有乙個空值 

作用用來保證資料完整性用來和其他表建立聯絡用的是提高查詢排序的

速度 個數主鍵只能有乙個乙個表可以有多個外來鍵乙個表可以有多個惟一索引 

聚集索引和非聚集索引的區別? 

聚集索引一定是唯一索引。但唯一索引不一定是聚集索引。 

聚集索引在索引頁裡直接存放資料而非聚集索引在索引頁裡存放的是

索引這些索引指向專門的資料頁的資料。

三、資料庫中主鍵和外來鍵的設計原則

主鍵和外來鍵是把多個表組織為乙個有效的關聯式資料庫的粘合劑。主鍵和外

鍵的設計對物理資料庫的效能和可用性都有著決定性的影響。 

必須將資料庫模式從理論上的邏輯設計轉換為實際的物理設計。而主鍵和

外來鍵的結構是這個設計過程的癥結所在。一旦將所設計的資料庫用於了生產環

境就很難對這些鍵進行修改所以在開發階段就設計好主鍵和外來鍵就是非常

必要和值得的。

主鍵

系資料庫依賴於主鍵---它是資料庫物理模式的基石。 

主鍵在物理層面上只有兩個用途 

1.惟一地標識一行。 

2.作為乙個可以被外來鍵有效引用的物件。 

基於以上這兩個用途下面給出了我在設計物理層面的主鍵時所遵循的一

些原則 

1.主鍵應當是對使用者沒有意義的。如果使用者看到了乙個表示多對多關係的

連線表中的資料並抱怨它沒有什麼用處那就證明它的主鍵設計地很好。 

2.主鍵應該是單列的以便提高連線和篩選操作的效率。 

注使用復合鍵的人通常有兩個理由為自己開脫而這兩個理由都是錯誤

的。其一是主鍵應當具有實際意義然而讓主鍵具有意義只不過是給人為地

破壞資料庫提供了方便。其二是利用這種方法可以在描述多對多關係的連線表

中使用兩個外部鍵來作為主鍵我也反對這種做法理由是復合主鍵常常導

致不良的外來鍵即當連線表成為另乙個從表的主表而依據上面的第二種方法

成為這個表主鍵的一部分然這個表又有可能再成為其它從表的主表其主

鍵又有可能成了其它從表主鍵的一部分如此傳遞下去越靠後的從表其主

鍵將會包含越多的列了。 

3.永遠也不要更新主鍵。實際上因為主鍵除了惟一地標識一行之外再

沒有其他的用途了所以也就沒有理由去對它更新。如果主鍵需要更新則說

明主鍵應對使用者無意義的原則被違反了。 

注這項原則對於那些經常需要在資料轉換或多資料庫合併時進行資料整

理的資料並不適用。 

4.主鍵不應包含動態變化的資料如時間戳、建立時間列、修改時間列等。 

5.主鍵應當有計算機自動生成。如果由人來對主鍵的建立進行干預就會

使它帶有除了惟一標識一行以外的意義。一旦越過這個界限就可能產生認為

修改主鍵的動機這樣這種系統用來鏈結記錄行、管理記錄行的關鍵手段就

會落入不了解資料庫設計的人的手中。

四、資料庫主鍵選取策略

我們在建立資料庫的時候需要為每張表指定乙個主鍵所謂主鍵就是能

夠唯一標識表中某一行的屬性或屬性組乙個表只能有乙個主鍵但可以有多

個候選索引。因為主鍵可以唯一標識某一行記錄所以可以確保執行資料更新、

刪除的時候不會出現張冠李戴的錯誤。當然其它字段可以輔助我們在執行這

些操作時消除共享衝突不過就不在這裡討論了。主鍵除了上述作用外常常

與外來鍵構成參照完整性約束防止出現資料不一致。所以資料庫在設計時主

鍵起到了很重要的作用。

常見的資料庫主鍵選取方式有

·自動增長字段

很多資料庫設計者喜歡使用自動增長型字段因為它使用簡單。自動增長

型字段允許我們在向資料庫新增資料時不考慮主鍵的取值記錄插入後數

據庫系統會自動為其分配乙個值確保絕對不會出現重複。如果使用sql 

server資料庫的話我們還可以在記錄插入後使用@identity全域性變數獲取系

統分配的主鍵鍵值。

·手動增長字段 

·uniqueidentifier 

·"comb(combine)"型別

資料庫 主鍵 外來鍵

1 什麼是主鍵 在一張表中,用來唯一標識一條記錄的字段集,叫做主關鍵字或者主關鍵碼,簡稱主鍵 或主碼 這裡說 欄位集 是因為主鍵可能用乙個字段或者多個欄位來表示。舉例來看 學生表 學號,姓名,性別,專業編號 這裡學號是主鍵,乙個學號id就可以唯一標識乙個學生的資訊。另乙個表 學生選課表 學號,課程號...

資料庫外來鍵主鍵

如果乙個欄位被設定為主鍵,那他一定是唯一的,並且是非空的。如果設定為整型,那麼可以新增為自動遞增的功能 外來鍵,應用於主從表。可以保證當前新增的字段在一定範圍內選擇。比如我有兩張表,乙個表是班級表,乙個表是學生表,我需要知道學生在哪乙個班級以及他的位置,我當然可以在班級表中寫好幾個列,但是顯得臃腫,...

資料庫筆記 主鍵與外來鍵 區別

主鍵是乙個關係的唯一標識,比如學生關係表 學號,姓名,系別 將 學號 定義為主鍵,因為乙個學號只能對應乙個學生,學號 就可以唯一標識這個關係表。外來鍵是指乙個屬性在當前的關係表裡不是主鍵,而這個屬性卻是另乙個表的主鍵。而且通過外來鍵可以將兩個表聯絡起來。比如上面的學生關係表,系別 不是主鍵,而如果存...