標籤:實體 英語 ali 伺服器 修改 完全 str 之間 集合
資料庫與伺服器、用戶端的層次關係
關於資料庫
程式中需要儲存資料的方式:
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 |
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的一些概念