資料庫相關知識整理(一)

2021-10-05 18:39:30 字數 2207 閱讀 6297

即表中的列的具有原子性,不可再分解,即列的資訊,不能分解, 只要資料庫是關係型資料庫(mysql/oracle/db2 /sql server),就自動的滿足 1nf。 資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。如果實體中的某個屬性有多個值時,必須拆分為不同的屬性。通俗理解即乙個欄位只儲存一項資訊。

如果關係模型r為第一正規化,並且r中的每乙個非主屬性完全函式依賴於r的某個候選鍵,則稱r為第二正規化模式(如果a是關係模式r的候選鍵的乙個屬性,則稱a是r的主屬性,否則稱a是r的非主屬性)。

例如,在選課關係表(學號,課程號,成績,學分),關鍵字為組合關鍵字(學號,課程號),但由於非主屬性學分僅依賴於課程號,對關鍵字(學號,課程號)只是部分依賴,而不是完全依賴,因此此種方式會導致資料冗餘以及更新異常等問題,解決辦法是將其分為兩個關係模式:學生表(學號,課程號,分數)和課程表(課程號,學分),新關係通過學生表中的外關鍵字課程號聯絡,在需要時進行連線。

如果關係模式r是2nf,且關係模式r(u,f)中的所有非主屬性對任何候選關鍵字都不存在傳遞依賴,則稱關係r是屬於第三正規化。

第三正規化(3nf);符合2nf,並且,消除傳遞依賴。

上圖中符合2nf ,但存在傳遞依賴(老師——>老師職稱。乙個老師一定能確定乙個老師職稱)。

解決辦法:分解。投影分解:

bc正規化(bcnf)是boyce-codd正規化的縮寫,其定義是:在關係模式中每乙個決定因素都包含候選鍵,也就是說,只要屬性或屬性組a能夠決定任何乙個屬性b,則a的子集中必須有候選鍵。bcnf正規化排除了任何屬性(不光是非主屬性,2nf和3nf所限制的都是非主屬性)對候選鍵的傳遞依賴與部分依賴。

比如我們有乙個學生導師表,其中包含字段:學生id,專業,導師,專業gpa,這其中學生id和專業是聯合主鍵。

這個表的設計滿足三正規化,有主鍵,不存在主鍵的部分依賴,不存在非主鍵的傳遞依賴。但是這裡存在另乙個依賴關係,「專業」函式依賴於「導師」,也就是說每個導師只做乙個專業方面的導師,只要知道了是哪個導師,我們自然就知道是哪個專業的了。

所以這個表的部分主鍵依賴於非主鍵部分,那麼我們可以進行以下的調整,拆分成2個表:

參考資料:

如果乙個欄位x在一張表(表一)中是主關鍵字,而在另外一張表(表二)中不是主關鍵字,則字段x稱為表二的外來鍵;換句話說如果關係模式r1中的某屬性集不是自己的主鍵,而是關係模式r2的主鍵,則該屬性集稱為是關係模式r1的外來鍵。

mysql 下,外來鍵設定:

on delete  規則:

1、cascade:級聯

(1)所謂的級聯刪除,就是刪除主鍵表的同時,外來鍵表同時刪除。

(2)以上面的例子將就是,假如院系表中的某個院系被刪除了,那麼在學生表中要想查詢這個被刪除的院系號所對應的院資訊就會報錯,因為已經不存在這個系了,所以,刪除院系表(主鍵表)時必須刪除其他與之關聯的表,這裡就說明了外來鍵的作用,保持資料的一致性、完整性。當然反過來講,你刪除學生表中的記錄,並不影響院系表中的資料,你查詢院系號也能正確查詢。所以刪除外來鍵表中的資料並不影響主鍵表。

2、no action(非活動,預設)、restrict:約束/限制

當取值為no action或者restrict時,則當在主鍵表中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許刪除。(即外來鍵表約束主鍵表)

3、set null

當取值為set null時,則當在主鍵表中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外鍵值為null(,一樣是外來鍵表約束主鍵表,不過這就要求該外來鍵允許取null)。

no action和restrict的區別:只有在及個別的情況下會導致區別,前者是在其他約束的動作之後執行,後者具有最高的優先權執行。

資料庫相關知識整理(三)

start transaction 一條或多條sql語句 commit 其中start transaction標識事務開始,commit提交事務,將執行結果寫入到資料庫。如果sql語句執行出現問題,會呼叫rollback,回滾所有已經執行成功的sql語句。當然,也可以在事務中直接使用rollback...

資料庫知識整理(一)

檢視 view 是從乙個或多個表 或 檢視 匯出的表。檢視與表 有時為與檢視區別,也稱表為基本表 base table 不同,檢視是乙個虛表,即檢視所對應的資料不進行實際儲存,資料庫中只儲存檢視的定義,在對檢視的資料進行操作時,系統根據檢視的定義去操作與檢視相關聯的基本表。建立檢視 create v...

Mysql資料庫相關一些知識整理

一 資料占用空間大小 mysql資料庫資料的儲存資訊由information schema 系統配置資料庫進行儲存。其中tables表儲存表的相關資訊,幾個重要字段如下 table schema 資料庫名 table name 表名 engine 所使用的儲存引擎 tables rows 記錄數 d...