資料庫設計的正規化
db:資料庫(database):儲存資料的庫,儲存了一系列有組織的資料。
dbms:資料庫管理系統(database management system):上面的資料庫就是通過dbms進行建立的, dbms就是乙個資料庫產品。
sql結構化查詢語言(structure query language):專門用來與資料庫(dbms)通訊的語言。
優點:
所有的dbms(資料庫軟體)都支援sql
簡單易學
語言靈活,可以完成很多複雜和高階的資料庫操作
三者之關係:使用dbms輸入sql來操作db伺服器的啟動和停止:用管理身份執行cmd視窗.
開啟:net start 服務名.
關閉:net stop 服務名.
伺服器可以在系統的服務中檢視,並且mysql也可以設定為自動和手動,我這裡設定的是自動,電腦開啟之後會自動開啟mysql,不用每次手動開啟那麼麻煩,當然相應的會拖延開機時間.mysql的登入與退出(這裡只講cmd命令下的開啟方式):
講完了mysql的前置需求,現在我們說一下sql的四大分類.// 在cmd視窗中輸入,中的內容為可省略,埠號是自己設定的,mysql預設是3306
mysql [-h
(主機名) localhost -
p(埠號)
]-uroot -
p(密碼)
// 一般我們可以直接縮寫,最後乙個root為密碼
mysql -uroot -proot
// 示例:
mysql -h localhost -p3306 -uroot -proot
ddl :運算元據庫、表
dml:增刪改表中的資料
dql:查詢表中的資料
dcl:管理使用者/授權
接著我們再說下mysql中的語法規範:
mysql中不區分大小寫,建議關鍵字大寫,表名、欄位名小寫
每條語句用分號結尾,在cmd視窗中,如果不加分號,那麼系統會認為語句沒有寫完,不會執行,但是在軟體中可以直接選擇執行,不加分號也可以,這裡建議是加上分號
主鍵外來鍵的簡單了解主鍵:用來確定一條記錄的唯一標識,就像每個員工都有自己的編號,通過這個編號,就可以知道這個員工的所有資訊.// 這是一條sql查詢語句
select
*from
employees
where
id =
1;
外來鍵:用於與另一張表做關聯.就像每個員工都有乙個職位編號,職位編號對應了職工表中的主鍵. 用一句話描述就是:"表a中的字段,是表b中的主鍵,那麼這個字段就是外來鍵.
需要注意的是,乙個表只能有乙個主鍵,但是可以有多個外來鍵
多表之間的關係
一對一:
一對多(多對一):人和身份證:乙個人只有乙個身份證號碼,而乙個身份證號碼只能對應乙個人,這就是一對一關係.
實現方式:
可以在任意一方設定唯一外來鍵指向另一方的主鍵
多對多:古代的門派和**:乙個門派可以有多個**,但乙個**只能加入乙個門派,這就是一對多關係
實現方式:
在多的一方建立外來鍵,指向"一"一方的主鍵
概念:設計資料庫是,需要遵循的一些規範,要遵循後面的正規化要求,必須先遵循前邊的所有正規化要求江湖俠客和武林秘籍:江湖俠客可以學很多門武功,同樣,乙個武功可以被很多江湖俠客所學習.
實現方式:
多對多關係需要借助第三張中間表,中間表需要包含兩個字段,分別指向兩張需要實現多對多關係表的主鍵.
關於正規化前提的幾個重要概念:
函式依賴:a–>b,如果通過a屬性(屬性組)的值,可以確定b屬性的值,則稱為b依賴於a
如:學號–>姓名 (學號、課程名)–>分數
完全函式依賴:a–>b.如果a是乙個屬性組,則b屬性值的確定需要a屬性組中的所有屬性值.
如:(學號、課程名)–>分數
部門函式依賴:a–>b,如果a是乙個屬性組,則b屬性值的確定只需要a屬性組中的某些值
如:(學號、課程名)–>姓名
傳遞函式依賴:a–b.b–>c,如果通過a屬性值(組)的值可以確定b屬性的值,再通過b屬性值確定c屬性值,那麼則稱c傳遞依賴於a
如:學號–>系名,系命–>系主任
碼:如果一張表中,乙個屬性或屬性組,被其他屬性所完全依賴,則稱這個屬性(屬性組)為該錶的碼
主屬性:碼屬性(組)的所有屬性
非主屬性:除主屬性外的所有屬性
第一正規化(1nf):
第二正規化(2nf):每一列都是不可分割的原子資料項,就相當於一張表中的一條資料,是最基本的正規化
第三正規化(3nf):在1nf的基礎上,非碼屬性必須完全依賴於碼(在1nf的基礎上消除非主屬性對主碼的部分函式依賴)
例表:在2nf的基礎上,任何非主屬性不依賴於其他非主屬性(在2nf的基礎上消除傳遞依賴)
(此表的主屬性組為:id、課程名)
首先分析一下此表存在的問題:
資料冗餘
存在部分函式依賴,(姓名,系命,系主任依賴於id),這樣如果小明和小紅畢業了,那麼對應的系名,系主任也就消失了,這顯然不合理
存在傳遞依賴:(系名依賴於id,系主任依賴於系名)
下面將表設定為如下,則可以解決以上所有問題.
以上所有內容借鑑 尚矽谷與傳智播客。知識點回顧
回顧 簡介 python 安裝 python3.8.5 why?python解釋型語言,安裝python3 直譯器 lib pip命令 pip list pip install x pip uninstall 解除安裝 pip install 版本號 pip freeze requiremente....
知識點回顧
方法 變數作用域 方法過載 ref 引用傳參,側重於在方法中一定要修改引數,傳入方法前必須賦值 out 側重於輸出,方法返回前 引數使用前 必須賦值 params 可變引數,只能修飾陣列型別,只能在方法列表的最後.如果沒有給可變引數賦值,那麼可變引數會自動初始化長度為0.方法遞迴 迴圈 方法自己呼叫...
c 知識點回顧
過載只與函式的引數有關,而與函式的返回型別無關 int 形參 實參 0 char short int double 形參 實參 float double 用省略號 表示,即函式可以有任意個任意型別的引數。如,int printf const char format,在乙個函式中,可指定多個 甚至全部...