MySQL的一些概念
數據庫與服務器、客戶端的層次關系
關於數據庫
程序中需要存儲數據的方式:
1 變量(列表、元組、集合、字典、嵌套)
2 外存(文件)(*.ini)
3 表格、Excel(*.xls、*.xlsx、*.csv)
4 結構化數據庫
數據庫中的基本概念
記錄(Record):數據庫中的一行
字段(Field):數據庫中的一列
實體(Entity):現實中客觀存在並可以被區分的事物。比如:學生、課程
屬性(Attribute):實體鎖具有的特征。比如:對於學生實體,所體現的屬性有:學號、姓名、年齡、性別
關系(RelationShip):實體與實體之間的依賴。包括:一對一、一對多、多對多。
以上三者(實體、屬性、關系)可以組成ER圖(實體關系圖)
通過Visio的數據庫模型圖建立表:
建表的時候需要考慮範式的約束
一般有如下範式:1NF 2NF 3NF BCNF 4NF 5NF
1NF:屬性不可分
姓名 |
電話號碼 |
年齡 |
|
座機 |
手機 |
||
張三 |
020-84444444 |
13777777777 |
23 |
李四 |
020-85555555 |
13888888888 |
34 |
如上,因為電話屬性可以拆分為座機和手機,所以不滿足1NF,修改如下:
姓名 |
座機 |
手機 |
年齡 |
張三 |
020-84444444 |
13777777777 |
23 |
李四 |
020-85555555 |
13888888888 |
34 |
2NF:符合1NF。非主屬性完全依賴於關鍵字
學號 |
姓名 |
課程編號 |
考試成績 |
101 |
張三 |
201 |
73 |
102 |
李四 |
202 |
53 |
該表中的依賴關系:
學號——姓名
(學號、課程編號)——考試成績
該表的關鍵字是:(學號、課程編號)
這裏的非主屬性姓名依賴於學號,是關鍵字的一部分,而不是全部。所以不滿足2NF
需要拆分成兩個表
學號 |
姓名 |
101 |
張三 |
102 |
李四 |
學號 |
課程編號 |
考試成績 |
101 |
201 |
73 |
102 |
202 |
53 |
這樣就滿足2NF了
3NF:符合1NF和2NF,並且消除傳遞依賴
學號 |
課程編號 |
老師 |
職稱 |
101(張三) |
201(高等數學) |
張老濕 |
磚家 |
102(李四) |
202(大學英語) |
陳教授 |
叫獸 |
103(王五) |
202(大學英語) |
陳教授 |
叫獸 |
顯然滿足1NF
該表的關鍵字是:(學號、課程編號)。後面的非主屬性完全依賴於關鍵字,所以滿足2NF
(學號、課程編號)——上課老師
老師——職稱
像這種A依賴於B,B依賴於C的設計,就稱為傳遞依賴,是不滿足3NF
需要拆分成兩個表
學號 |
課程編號 |
老師 |
101(張三) |
201(高等數學) |
張老濕 |
102(李四) |
202(大學英語) |
陳教授 |
103(王五) |
202(大學英語) |
陳教授 |
老師 |
職稱 |
張老濕 |
磚家 |
陳教授 |
叫獸 |
這樣就滿足了3NF的標準了
後面還有BCNF、4NF、5NF。但是我們設計數據庫一般要求達到3NF即可
MySQL的一些概念