一、正規化
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 是資料庫設計...