正規化 主外來鍵

2022-03-15 07:46:54 字數 3236 閱讀 2922

一、正規化

1.第一正規化:略

2.第二正規化:

不存在

部分依賴

關鍵字為「組合關鍵字」時,不能有非關鍵字屬性

部分依賴

於組合鍵

反例: (學號,科目號)  學分    分數

由於「科目號——>學分」,有部分依賴的情況,故不符合第二正規化

3.第三正規化:不存在傳遞依賴

不能有非主關鍵字

傳遞依賴於主關鍵字

反例:(科目號)   科目名      學分

由於:「科目號——>科目名——>學分」,存在傳遞依賴的情況,故不符合第三正規化

注:一般只要有「非主屬性x——>非主屬性y」的情況就不滿足第三正規化

二、主外來鍵

1.新增主鍵

a)為staffinfo表設定主鍵

主鍵設定完成:

b)為tasks表設定聯合主鍵

同時選中其中的兩個列名:

聯合主鍵設定完成:

2.新增外來鍵

開啟「表和列規範」進行設定

設定「主表中的列」和「從表中的列」的對應關係:

外來鍵設定完成之後,就可從「資料庫關係圖」中看到各個表之間的關係:

3.主表與從表資料的插入與刪除

主表中原始資料如下:

從表中原始資料如下:

a)在從表中插入行

1)

主表中有外來鍵列對應的值

1use

edisondb;

2insert

into

tasks(staffid,projectid,useddays)

3values4(

5001

,1002,30

);

執行結果為:

此時,tasks表中的資料為:

2)主表中無外鍵列對應的值

1use

edisondb;

2insert

into

tasks(staffid,projectid,useddays)

3values4(

5009

,1003,30

);

執行結果為:

b)在主表中刪除行

1)從表中外鍵列有對應的值

1use

edisondb;

2delete

from

staffinfo

3where

staffid

=5001

; 執行結果為:

注:之所以會出現上面刪除失敗,是因為sql server預設情況下是不支援「級聯刪除」的(05中稱為「層疊刪除」);

為了能「級聯刪除」,需要進行如下設定:(將刪除規則由「無操作」改為「層疊」)

儲存設定之後,執行如下語句:

1use

edisondb;

2delete

from

staffinfo

3where

staffid

=5001

; 執行結果為:

此時staffinfo表中的資料為:

tasks表中的資料為:

2)從表中外鍵列無對應的值

執行如下語句:

1use

edisondb;

2delete

from

staffinfo

3where

staffid

=5002

;執行結果為:

此時,staffinfo表中的內容為:

注:當從主表中刪除一行資料,且該行在從表外來鍵列中沒有對應資料時,無論是否設定了「級聯刪除」,該資料都可被成功刪除。

mysql建立主外來鍵關聯 mysql主外來鍵建立心得

mysql主主外來鍵建立 1 確保參照的表和字段是存在的 2 關聯表必須是innodb儲存型別 3 必須設定主關聯表主鍵 4 主鍵與外來鍵資料型別和字元編碼 unsigned 必須一致 5 確保以上宣告的句法是正確的 附 mysql建立表預設型別為 myisam 如果要改變預設表型別可在my.inf...

SQL 主外來鍵

以下面三張表為例 有三張表,一張表是讀者資訊,有乙個屬性為readno,一張表是圖書的資訊,有乙個屬性是bookno,一張表是借閱關係,有兩個屬性分別以讀者 資訊表中的readno,和圖書資訊表中的bookno為外來鍵,我想問的是,在借閱關係表中插入資料時不是得自己寫入readno和bookno嗎,...

mysql主外來鍵

自己的 總提示 error 1005 can t create table errno 150 的錯誤鬱悶了好幾天,看了下面的文章終於成功了,犯了下面提到的三情況中的第三種,太不細心了,居然忽略了 unsigned 大家也要多留意呀!參照完整性 referentialintegrity 是資料庫設計...