數據庫設計
定義: 指的是將應用中涉及的數據實體及這些數據實體 之間的關系,進行規划和結構化的過程。
影響數據庫系統效率的因素:數據庫中創建的數據結構種類,以及在數據實體之間建立的關系
好的設計:效率高,便於進一步擴展,使應用程序的開發變得容易
糟糕的設計:效率低下,更新和檢索數據時會出現許多問題。
一、設計的步驟:
一般在項目開發需要經過:需求分析、概要設計、詳細設計、代碼編寫、運行測試和部署上線這幾個階段,而數據設計在這幾個階段主要做的事,如下:(當然上線后有時也會出現改需求,動代碼動數據庫 )
//數據庫設計時需要注意的 需求分析階段:分析客戶業務和數據處理需求 概要設計階段:繪制數據庫的E-R圖,用於在項目團隊內部、設計人員和客戶之間的溝通,確認需求信息的正確性和完整性。 詳細設計階段:將E-R 圖轉換為多張表,進行邏輯設計,確認各表的主外鍵,並應用數據庫設計的三大范式進行審核。
經項目開會討論確定后,根據項目的技術實現、團隊開發能力進行項目的成本預算,選擇具體的 數據庫進行物理實現,之后就是開發應用程序
注意:
在需求分析階段的重點是調查、收集並分析客戶業務的數據需求、處理需求 、安全性與完整性需求。
常用的需求調研方法:在客戶的公司跟班實習、組織召開調查會、邀請專人介紹、設計調查表並請用戶填寫和查閱與業務相關的數據記錄等。
常用的需求分析方法:調查客戶的公司組織情況、各部門的業務需求情況、協助客戶分析系統的各種業務需求和確定新系統的邊界。
//在進行數據庫系統分析時可參考的基本步驟 1、收集信息:創建數據庫之前,必須充分理解數據庫需要完成的任務和功能,了解數據庫需要存儲哪些數據、實現哪些功能 2、標識實體:收集信息后,標識數據庫要管理的關鍵對象或實體。
(實體一般是名詞,一個實體只描述一件事情,不能出現含義相同的實體,而且實體可以是有形的事物(如人或產品),也可以是無形的事物(如部門,時間))
3、標識每個實體需要存儲的詳細信息:將數據庫中的主要實體標示為表的候選實體以后,就要標識每個實體存儲的詳細信息,也稱為該實體的屬性,這些屬性將組成表中列。
注意:在進行實體屬性分解是,含義相同的成員信息不能重復出現(如聯系方式與電話)
每個實體對應一個表,實體中的每個屬性對應表中的每一列 4、標識實體之間的關系: 關系型數據庫的一個強大功能,可以關聯數據庫中各個項目的相關信息。不同類型的信息可以單獨存儲,當需要的時候,數據庫引擎還可以根據需要將數據組合起來。
在設計過程中,要標識實體之間的關系,首先需要分析數據庫表,確定這些表在邏輯上是如何相關的,然后添加關系列建立起表之間的連接,
總的來說就是了解需求分析信息確定需要哪些表,在確定各個表中需要哪些列,以及各個表之間的關系
實現思路:
收集信息:確定客戶需要做什么之后,收集一切相關的信息,盡量不遺漏任何信息
標識實體(確定表):原則是實體一般是名詞,一個實體只能描述一件事,不能重復出現含義相同的實體
標識每個實體屬性(確定列):確定每個實體需要存儲哪些信息
標識各個實體之間的聯系(確定表之間的關系)
二、E-R 圖(Entity-Relationship):也稱為實體-關系圖 ,用於和項目團隊的其他成員及客戶溝通,討論數據庫設計是否滿足客戶的業務和數據處理需求,主要由一些含有特殊含義的圖形符號構成

其中:
1、實體:指現實世界中具有區分其他事物的特征或屬性並與其他事物有聯系事物。
實體一般是名詞,對應表中的一行數據
2、屬性:實體的特征
屬性對應表中的列
3、聯系:指兩個或多個實體之間的關聯關系
實體用矩形表示,一般是名詞
屬性用橢圓形表示,一般也是名詞
聯系用菱形表示,一般是動詞
4、映射基數:表示通過聯系與該實體關聯的其他實體的個數。
對於實體集X與Y之間的關系有以下四個:一對一、一對多、多對一、多對多
一對一:X中的一個實體最多與Y中的一個實體關聯,並且Y中的一個實體最多與X中的一個實體關聯。
一對多:X中的一個實體可以與Y中的任意數量的實體關聯,Y中的一個實體最多與X中的一個實體關聯
多對一:X中的一個實體最多與Y中的一個實體關聯,Y中的一個實體可以與X中任意數量的實體關聯
多對多:X中的一個實體可以與Y中的任意數量的實體關聯,Y中的一個實體可以與X中任意數量的實體關聯
5、實體關系圖
//E-R圖 矩形表示實體 橢圓形表示屬性 菱形表示聯系集 直線用來連接屬性與實體集,實體集與聯系集,直線也可以是有方向的 (在末端有一個箭頭),用來表示聯系集的映射基數,箭頭可以視為指向引用的實體。
主要就是三種方式:一對一( 1:1)、一對多(1:N)、多對多(M:N)

三、關系數據庫模式
關系數據庫模式是對關系數據庫結構(或框架)的描述,一個關系通常對應一個表。
(關系模型: 指使用二維表的形式表示實體和實體間聯系的數據模型)
關系模式 的表現形式有:R(U) 或 R(A,B)
其中,R表示關系名,U表示屬性集合,A,B 代表U中的屬性
1、將E-R 圖轉換為關系模式的步驟
(1)、將實體轉化為關系模式的R(A,B...)形式
如上述的:供應商,商品
供應商(供應商編碼,供應商名稱,類型,聯系方式、地址)
商品(商品編碼,商品名稱,類型,單價,數量)
(2)、建立實體間聯系的轉換(一對一,一對多,多對多)
當兩個實體各自轉化為 關系模式后,實體間聯系的轉換
一對一的轉換:把任意實體的主鍵放到另一實體的關系模式中
一對多的轉換:把聯系數量為1的實體的主鍵,放到聯系數量為N 的實體關系模式中
多對多的轉換:把兩個實體中的主鍵和聯系屬性放到另一個關系模式中,需要多生成一個關系模式中
上述也可以轉換為: 下划線為主鍵,加粗為外鍵,考慮的是 一個商品有多個供應商
供應商(供應商編碼,供應商名稱,類型,聯系方式、地址,商品編碼)
商品(商品編碼,商品名稱,類型,單價,數量)
四、繪制數據庫模型圖
現在工具很多,比較經典的是 Microsoft Visio ,不過我一般使用的是線上的 ProcessOn
好處:設計良好的數據庫模型可以通過圖形化的方式顯示數據庫存儲的信息及表之間的關系,以確保數據庫設計的准確、完整且有效。
大致介紹一下使用visio 繪制數據庫模型圖
1、打開visio --> 新建 --> 軟件和數據庫 --> 數據庫模型圖

2、打開后拖動繪制,先定義表物理名稱以及概念名稱

3、添加數據列及相應的屬性

4、添加實體之間的映射關系
按照上述增加好商品表后在供應商表中添加商品主鍵,注意拖動關系的時候實體會變成紅色

注意:在數據庫模型圖中體現實體的映射關系,上述 定義的 商品與供應商之間是一對多的關系,多的那一方會有一 的主鍵作為外鍵進行關聯,
一般來說,一對多的關系是一個表中的主鍵對應另一個表中的字段名與主鍵名相同。
在多對多關系中除了要將多對多種的兩個實體各自轉換為表外,一般要創建一個第三個表,將多對多的關系划分為兩個一對多的關系,而這個表稱為連接表,主要存放這兩個表的主鍵,用來記錄關系的每個匹配項或實例。
如:訂單表和產品表間是多對多關系,這種關系可以通過與訂單明細表建立兩個一對多關系來定義,一個訂單有多個產品,每個產品可以出現在多個訂單中。

