MySQL 学习笔记(14)— 数据库设计流程、实体关系图、第一范式、第二范式、第三范式、外键使用
本文參考:https://gitbook.cn/gitchat/column/undefined/topic/5db92c12a9c3a53bc3800f0c
1. 數(shù)據(jù)庫(kù)設(shè)計(jì)流程
數(shù)據(jù)庫(kù)設(shè)計(jì)是對(duì)數(shù)據(jù)進(jìn)行組織和結(jié)構(gòu)化的過(guò)程,關(guān)鍵問(wèn)題是數(shù)據(jù)模型的設(shè)計(jì)。一個(gè)良好的設(shè)計(jì)對(duì)于數(shù)據(jù)庫(kù)系統(tǒng)至關(guān)重要,它可以減少系統(tǒng)中的數(shù)據(jù)冗余、確保數(shù)據(jù)的一致性和完整性,同時(shí)易于維護(hù)和擴(kuò)展。
常見的數(shù)據(jù)庫(kù)設(shè)計(jì)流程主要包括以下幾個(gè)步驟:
- 需求分析,收集和分析用戶對(duì)系統(tǒng)的數(shù)據(jù)存儲(chǔ)和處理需求,記錄需要存儲(chǔ)的數(shù)據(jù)對(duì)象。
- 概念設(shè)計(jì),根據(jù)需求創(chuàng)建數(shù)據(jù)庫(kù)的概念模型。也就是找出其中的實(shí)體、實(shí)體的屬性以及實(shí)體之間的關(guān)系,結(jié)果通常是實(shí)體關(guān)系圖(Entity-Relationship Diagram)。
- 邏輯設(shè)計(jì),設(shè)計(jì)數(shù)據(jù)庫(kù)的關(guān)系模式,包括定義表的主鍵和外鍵。另外,還需要通過(guò)規(guī)范化的流程對(duì)關(guān)系模式進(jìn)行優(yōu)化,減少數(shù)據(jù)的冗余,維護(hù)數(shù)據(jù)的一致性和完整性。
- 物理設(shè)計(jì),結(jié)合具體使用的數(shù)據(jù)庫(kù)管理系統(tǒng),確定物理數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),包括索引的優(yōu)化等。
- 實(shí)施運(yùn)行,根據(jù)設(shè)計(jì)結(jié)果建立實(shí)際的數(shù)據(jù)庫(kù)環(huán)境,進(jìn)行測(cè)試和上線運(yùn)行。同時(shí),還包含運(yùn)行環(huán)境的維護(hù)、調(diào)整和優(yōu)化。
以上流程之間并不是簡(jiǎn)單的順序關(guān)系,有可能需要反復(fù)迭代;但對(duì)于簡(jiǎn)單的應(yīng)用系統(tǒng),也有可能跳過(guò)一些步驟進(jìn)行快速設(shè)計(jì)。
2. 實(shí)體關(guān)系圖
實(shí)體關(guān)系圖(Entity-Relationship Diagram)是一種用于數(shù)據(jù)庫(kù)設(shè)計(jì)的結(jié)構(gòu)圖,它描述了數(shù)據(jù)庫(kù)中的實(shí)體以及這些實(shí)體之間的關(guān)系。 ERD 包括實(shí)體、屬性以及關(guān)系三個(gè)部分。
- 實(shí)體 ,代表了一種對(duì)象或者概念。例如,員工、部門和職位都可以稱為實(shí)體。實(shí)體在 ERD 中通常使用長(zhǎng)方體來(lái)表示。
- 屬性,表示實(shí)體的某種特性,例如員工擁有姓名、性別、工資、所在部門等屬性。屬性在 ERD 中通常使用橢圓來(lái)表示。
- 關(guān)系,則用于表示兩個(gè)實(shí)體之間的相互聯(lián)系,在 ERD 中通常使用菱形來(lái)表示。三種主要的關(guān)系類型是一對(duì)一、一對(duì)多和多對(duì)多關(guān)系。例如,一夫一妻制是一種典型的一對(duì)一的關(guān)系;一個(gè)員工只能屬于一個(gè)部門,一個(gè)部門可以有多個(gè)員工,部門和員工是一對(duì)多的關(guān)系;一個(gè)學(xué)生可以選修多門課程,一門課程可以被多個(gè)學(xué)生選擇,學(xué)生和課程是多對(duì)多的關(guān)系。
實(shí)體關(guān)系示例圖:
3. 規(guī)范化設(shè)計(jì)
規(guī)范化( Normalization )是數(shù)據(jù)庫(kù)設(shè)計(jì)的一系列原理和技術(shù),主要用于減少表中數(shù)據(jù)的冗余,增加完整性和一致性。
關(guān)系模式的創(chuàng)始人 Edgar Codd 最早提出了第一范式( 1NF )、第二范式( 2NF )以及第三范式( 3NF )。隨后又出現(xiàn)了更高級(jí)別的范式,包括 BC 范式( BCNF )、第四范式( 4NF )等。每個(gè)范式都基于前面的范式,例如第二范式需要先滿足第一范式。
3.1 第一范式
第一范式要求滿足以下條件:
- 表中的字段都是不可再分的單一屬性;
- 表需要定義主鍵(
PRIMARY KEY);
簡(jiǎn)單來(lái)說(shuō),首先就是每個(gè)屬性要有單獨(dú)的字段。另外,還需要為表定義一個(gè)主鍵,用于唯一識(shí)別表中的每一行數(shù)據(jù)。
3.2 第二范式
第二范式要求滿足以下條件:
- 滿足第一范式;
- 非主鍵字段必須完全依賴于主鍵,不能只依賴于主鍵的一部分;
3.3 第三范式
第三范式要求滿足以下條件:
- 滿足第二范式;
- 屬性不依賴于其它的非主屬性;
當(dāng)主鍵決定字段 A,字段 A 又決定字段 B 時(shí),稱為傳遞函數(shù)依賴。也就是說(shuō)表中的每個(gè)屬性只僅僅依賴于主鍵,與表中其它的屬性沒(méi)有任何關(guān)系。
對(duì)于前三個(gè)范式而言,只需要將不同的實(shí)體/對(duì)象單獨(dú)存儲(chǔ)到一張表中,并且通過(guò)外鍵建立它們之間的聯(lián)系即可滿足。
4. 反規(guī)范化
簡(jiǎn)單來(lái)說(shuō),規(guī)范化就是將大表拆分成多個(gè)小表,并且通過(guò)外鍵建立它們之間的聯(lián)系。但是,規(guī)范化可能導(dǎo)致連接查詢( JOIN )過(guò)多,從而降低數(shù)據(jù)庫(kù)的性能。因此,有時(shí)候?yàn)榱颂岣吣承┎樵兓蛘邞?yīng)用的性能而故意降低規(guī)范反的程度,也就是**反規(guī)范化( denormalization )。
常用的反規(guī)范化方法包括增加冗余字段、增加計(jì)算列、將小表合成大表等。
5. 外鍵使用
外鍵( FOREIGN KEY )是數(shù)據(jù)庫(kù)用于實(shí)現(xiàn)參照完整型的約束。利用數(shù)據(jù)庫(kù)的外鍵可以保證數(shù)據(jù)的完整性和一致性。
數(shù)據(jù)庫(kù)為了維護(hù)外鍵需要犧牲一定的性能,尤其是在大數(shù)據(jù)量高并發(fā)的情況下。因此出現(xiàn)了另一種解決方案,就是將完整性檢查放到應(yīng)用層去實(shí)現(xiàn),而應(yīng)用程序相對(duì)比較容易擴(kuò)展。
總之,在系統(tǒng)的設(shè)計(jì)之初應(yīng)該盡量使用外鍵確保完整性。如果隨著業(yè)務(wù)增長(zhǎng)出現(xiàn)性能問(wèn)題,可以考慮在應(yīng)用中實(shí)現(xiàn)約束。
總結(jié)
以上是生活随笔為你收集整理的MySQL 学习笔记(14)— 数据库设计流程、实体关系图、第一范式、第二范式、第三范式、外键使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 人保车险多少钱啊?
- 下一篇: MySQL 学习笔记(15)— 连接查询