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