從數據庫是主數據庫的備份,當主數據庫變化時從數據庫要更新,這些數據庫軟件可以設計更新周期。這是提高信息安全的手段。主從數據庫服務器不在一個地理位置上,當發生意外時數據庫可以保存。
主外鍵的關系結構:
1,一對一,不用引用主外鍵,把它們放一個表中即可
例如:一個學生只能有一個卡號,那么學生跟卡號放在一個表中即可
2,一對多,引用主外鍵,‘一’相當於主鍵,‘多’即是引用主鍵的外鍵。
例如:一個班級可以有多個學生,並且一個學生只能屬於一個班級,這就是一對多的關系;
3,多對多關系,需要創建一個表,表中需要兩個字段,分別是引用,兩個多對多字段主鍵的外鍵。
例如:
學生表(學號,姓名,…………)主鍵:學號
課程表(課程號,課程名,…………)主鍵:課程號
一個學生能選多門課,一個課可以由多個學生選,即是多對多關系,
那么成績表就是它們之間關系的體,
即引用成績表(學號,課程號,成績)。這里學號和課程號,分別是學生表和課程表中學號和課程號的外鍵
在我們現在這個階段中,主要還是使用,主外鍵間的一對多的關系
主鍵Primary key,唯一標示一個實體。是保證數據庫的實體完整性,保證數據中數據的正確性和合理性,取值非空唯一。
外鍵Foreign,是用來使表與表之間聯系。用來保證數據庫的參照完整性,外鍵的取值必須來自參照表參照列的值,可以為空也可不為空。
外鍵的作用:
保持數據一致性,完整性,主要目的是控制存儲在外鍵表中的數據。 使兩張表形成關聯,外鍵只能引用外表中的列的值!
一、什么是主鍵、外鍵
關系型數據庫中的一條記錄中有若干個屬性若其中某一個屬性組(注意是
組)能唯一標識一條記錄該屬性組就可以成為一個主鍵
比如
學生表(學號姓名性別班級)
其中每個學生的學號是唯一的學號就是一個主鍵
課程表(課程編號,課程名,學分)
其中課程編號是唯一的,課程編號就是一個主鍵
成績表(學號,課程號,成績)
成績表中單一一個屬性無法唯一標識一條記錄學號和課程號的組合才可
以唯一標識一條記錄所以學號和課程號的屬性組是一個主鍵
成績表中的學號不是成績表的主鍵但它和學生表中的學號相對應並且
學生表中的學號是學生表的主鍵則稱成績表中的學號是學生表的外鍵
同理成績表中的課程號是課程表的外鍵
定義主鍵和外鍵主要是為了維護關系數據庫的完整性總結一下
1.主鍵是能確定一條記錄的唯一標識比如一條記錄包括身份正號姓
名年齡。
身份證號是唯一能確定你這個人的其他都可能有重復所以身份證號
是主鍵。
2.外鍵用於與另一張表的關聯。是能確定另一張表記錄的字段用於保持
數據的一致性。
比如A表中的一個字段是B表的主鍵那他就可以是A表的外鍵。
二、主鍵、外鍵和索引的區別
主鍵、外鍵和索引的區別?
主鍵外鍵索引
定義唯一標識一條記錄不能有重復的不允許為空表的外鍵是另一表
的主鍵,外鍵可以有重復的,可以是空值該字段沒有重復值但可以有一個空值
作用用來保證數據完整性用來和其他表建立聯系用的是提高查詢排序的
速度
個數主鍵只能有一個一個表可以有多個外鍵一個表可以有多個惟一索引
聚集索引和非聚集索引的區別?
聚集索引一定是唯一索引。但唯一索引不一定是聚集索引。
聚集索引在索引頁里直接存放數據而非聚集索引在索引頁里存放的是
索引這些索引指向專門的數據頁的數據。
三、數據庫中主鍵和外鍵的設計原則
主鍵和外鍵是把多個表組織為一個有效的關系數據庫的粘合劑。主鍵和外
鍵的設計對物理數據庫的性能和可用性都有着決定性的影響。
必須將數據庫模式從理論上的邏輯設計轉換為實際的物理設計。而主鍵和
外鍵的結構是這個設計過程的症結所在。一旦將所設計的數據庫用於了生產環
境就很難對這些鍵進行修改所以在開發階段就設計好主鍵和外鍵就是非常
必要和值得的。
主鍵
系數據庫依賴於主鍵---它是數據庫物理模式的基石。
主鍵在物理層面上只有兩個用途
1.惟一地標識一行。
2.作為一個可以被外鍵有效引用的對象。
基於以上這兩個用途下面給出了我在設計物理層面的主鍵時所遵循的一
些原則
1.主鍵應當是對用戶沒有意義的。如果用戶看到了一個表示多對多關系的
連接表中的數據並抱怨它沒有什么用處那就證明它的主鍵設計地很好。
2.主鍵應該是單列的以便提高連接和篩選操作的效率。
注使用復合鍵的人通常有兩個理由為自己開脫而這兩個理由都是錯誤
的。其一是主鍵應當具有實際意義然而讓主鍵具有意義只不過是給人為地
破壞數據庫提供了方便。其二是利用這種方法可以在描述多對多關系的連接表
中使用兩個外部鍵來作為主鍵我也反對這種做法理由是復合主鍵常常導
致不良的外鍵即當連接表成為另一個從表的主表而依據上面的第二種方法
成為這個表主鍵的一部分然這個表又有可能再成為其它從表的主表其主
鍵又有可能成了其它從表主鍵的一部分如此傳遞下去越靠后的從表其主
鍵將會包含越多的列了。
3.永遠也不要更新主鍵。實際上因為主鍵除了惟一地標識一行之外再
沒有其他的用途了所以也就沒有理由去對它更新。如果主鍵需要更新則說
明主鍵應對用戶無意義的原則被違反了。
注這項原則對於那些經常需要在數據轉換或多數據庫合並時進行數據整
理的數據並不適用。
4.主鍵不應包含動態變化的數據如時間戳、創建時間列、修改時間列等。
5.主鍵應當有計算機自動生成。如果由人來對主鍵的創建進行干預就會
使它帶有除了惟一標識一行以外的意義。一旦越過這個界限就可能產生認為
修改主鍵的動機這樣這種系統用來鏈接記錄行、管理記錄行的關鍵手段就
會落入不了解數據庫設計的人的手中。
四、數據庫主鍵選取策略
我們在建立數據庫的時候需要為每張表指定一個主鍵所謂主鍵就是能
夠唯一標識表中某一行的屬性或屬性組一個表只能有一個主鍵但可以有多
個候選索引。因為主鍵可以唯一標識某一行記錄所以可以確保執行數據更新、
刪除的時候不會出現張冠李戴的錯誤。當然其它字段可以輔助我們在執行這
些操作時消除共享沖突不過就不在這里討論了。主鍵除了上述作用外常常
與外鍵構成參照完整性約束防止出現數據不一致。所以數據庫在設計時主
鍵起到了很重要的作用。
常見的數據庫主鍵選取方式有
·自動增長字段
很多數據庫設計者喜歡使用自動增長型字段因為它使用簡單。自動增長
型字段允許我們在向數據庫添加數據時不考慮主鍵的取值記錄插入后數
據庫系統會自動為其分配一個值確保絕對不會出現重復。如果使用SQL
Server數據庫的話我們還可以在記錄插入后使用@IDENTITY全局變量獲取系
統分配的主鍵鍵值。
·手動增長字段
·UniqueIdentifier
·"COMB(Combine)"類型
