很多字段的数据要插入另一张表_一文看懂数据库设计之逻辑设计,值得收藏
概述
數(shù)據(jù)庫邏輯設計是從事數(shù)據(jù)庫應用設計、開發(fā)、運行維護等各方面工作的一個重要的基礎性工作。根據(jù)不同業(yè)務和應用需求,確定并遵循數(shù)據(jù)庫邏輯設計原則,例如按照第三范式開展邏輯設計,不僅能滿足減少數(shù)據(jù)冗余、保證數(shù)據(jù)一致性和完整性、易擴展性和伸縮性等需求,也是保障系統(tǒng)高性能的一個重要基礎。
一、為什么要邏輯設計?
1、全表掃描案例
從一個案例來看,例如查詢“喜歡語文的所有學生”
--由于%號這里肯定是走了全表掃描select id,name,hobby from student where hobby like '%語文%';2、原因
select id,name,hobby from student;ID NAME HOBBY---------------------1 小明 語文,數(shù)學2 小紅 英語,語文,數(shù)學3 小林 英語,語文可以看到如果是這么設計表的話,把學生的愛好都塞在一個字段HOBBY中,那么查詢條件只能寫成like '%語文%'。這里的根本原因是該表設計不符合規(guī)范化設計理論,從而導致了全表掃描。這里我們就可以看出邏輯設計的重要性了。
二、什么是邏輯設計
1、概念總結
1)將需求轉化成數(shù)據(jù)庫的邏輯模型
2)通過ER圖的型式對邏輯模型進行展示
3)同所選用的具體的DBMS系統(tǒng)無關
2、名詞解釋
關系:一個關系對應通常所說的一張表
元組:表中的一行即為一個元組
屬性:表中的一列即為一個屬性,每一個屬性都有一個名稱,稱為屬性名
候選碼:表中的某個屬性組,它可以唯一確定一個元組
主碼:一個關系有多個候選碼,選定其中一個為主碼
域:屬性的取值范圍
分量:元組中的一個屬性值
3、ER圖例說明
矩形:表示實體集,矩形內寫實體集的名字
菱形:表示聯(lián)系集
橢圓:表示實體的屬性
線段:將屬性連接到實體集,或將實體集連接到聯(lián)系集
4、數(shù)據(jù)操作異常及數(shù)據(jù)冗余
插入異常:如果某實體隨著另一個實體的存在而存在,即缺少某個實體時無法表示這個實體,那么這個表就存在插入異常。
更新異常:如果更改表所對應的某個實體實例的單獨屬性時,需要將多行更新,那么就說這個表存在更新異常。
刪除異常:如果刪除表的某一行來反映某實體實例,失效時導致另一個不同實體實例信息丟失,那么這個表中就存在刪除異常。
注意:若一個表中存在插入異常,那它肯定存在刪除異常和更新異常。
數(shù)據(jù)冗余:是指相同的數(shù)據(jù)在多個地方存在,或者說表中的某個列可以由其他列計算得到,這樣就說表中存在數(shù)據(jù)冗余。
三、什么是規(guī)范化設計
1、第一范式(所有屬性必須是單值)
定義:數(shù)據(jù)庫表中的所有字段都是單一屬性,不可再分的。這個單一屬性是由基本的數(shù)據(jù)類型所構成的,如整數(shù),浮點數(shù),字符串等,換句話說,第一范式要求數(shù)據(jù)庫中的表都是二維表。(二維表就是由行和列組成的表)
2、第二范式(所有屬性必須依賴于該實體的唯一標識屬性)
定義:數(shù)據(jù)庫的表中不存在非關鍵字段對任一候選關鍵字段的部分函數(shù)依賴。部分函數(shù)依賴是指存在著組合關鍵字中的某一關鍵字決定非關鍵字的情況。
換句話說:所有單關鍵字的表都符合第二范式。
修改后的:
通俗解釋:
完全依賴:表中只有一個關鍵字(即主鍵),其他屬性的增刪改查的時候定位到這一行都是依賴此關鍵字的。
第二范式:只能有一個主鍵,不能有復合主鍵,可以就滿足了第二范式。
由于供應商和商品之間是多對多的關系,所以只有使用商品名稱和供應商名稱才可以唯一標識出一件商品,也就是商品名稱和供應商名稱是一組組合關鍵字。
上表中存在以下的部分函數(shù)依賴關系
(商品名稱)—>(價格,描述,重量,商品有效期)(供應商名稱)—>(供應商電話)3、第三范式(沒有一個非唯一標識屬性依賴于另一個非唯一標識屬性)
定義:第三范式是在第二范式的基礎上定義的,如果數(shù)據(jù)表中不存在非關鍵字段,對任意候選關鍵字段的傳遞函數(shù)依賴則符合第三范式。
存在問題:
(分類,分類描述)對于每一個商品都會進行記錄,所以存在數(shù)據(jù)冗余,同時也會存在數(shù)據(jù)deep插入、更新及刪除異常。
4、BC范式
定義:在第三范式的基礎上,數(shù)據(jù)庫表中如果不存在任何字段對任一候選關鍵字段的傳遞函數(shù)依賴則符合BC范式。也就是說如果是復合關鍵字,則復合關鍵字之間也不能存在函數(shù)依賴關系
存在下列關系因此不符合BCNF要求:
(供應商)—>(供應商聯(lián)系人)(供應商聯(lián)系人)—>(供應商)并且存在數(shù)據(jù)操作異常及數(shù)據(jù)冗余
總結
第一,二,三范式解決的是非主屬性的關系。BC 范式解決的是主屬性的關系;
第一范式:就是原子性,字段不可再分割,(列屬性不能在細分為子列)
第二范式:就是完全依賴,沒有部分依賴;(非主屬性不能依賴于主鍵的一部分,要完全依賴于主鍵(主鍵是復合鍵))
第三范式:沒有傳遞函數(shù)依賴。(非主屬性之間的依賴)
BC范式: 解決部分主鍵依賴于非主鍵部分(復合關鍵字之間也不能存在函數(shù)依賴關系)。
覺得有用的朋友多幫忙轉發(fā)哦!后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~
總結
以上是生活随笔為你收集整理的很多字段的数据要插入另一张表_一文看懂数据库设计之逻辑设计,值得收藏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正则表达式不包含某个字符串_JMeter
- 下一篇: oracle 合并重复数据_三天三夜整理