大家好,我是jacky,很高興跟大家分享本課時的內容,從本節課開始,就開始了我們第二章的學習,第一章我們拋出了若干問題,從第二章開始往后,都是解決問題的一個過程;
第一章的案例中,我們拿手機銷售公司舉例,我們看到了因為沒有構架數據共享體系,該公司的數據管理是混亂並且低效的,那么本章節,我們就來給這家公司構建一個數據庫體系吧;
(一)數據庫設計四步曲
數據庫設計是整個實際業務項目里最為核心的部分,如果說我們把項目中數據庫設計攻克了,那么通常來說,這個項目就成功了一半;如果在數據庫設計的環節出了問題,即使我們代碼寫的再牛,框架用的再熟,項目大概率都是要失敗的;
我們說,無論我們要設計的數據庫的大小和復雜程度如何,在進行數據庫設計時,都遵循着下面這四個步驟:
(1) 收集信息
(2) 標識實體
(3) 標識每個實體需要存儲的詳細信息
(4) 標識實體之間的關系
1.1 收集信息
在創建數據庫之前,我們要充分理解數據庫需要完成的任務和功能。簡單的說,就是需要了解數據庫需要存儲哪些信息和數據,要實現哪些功能;拿手機銷售公司為例,為了給大家講的深入淺入,jacky這里就給定這家公司一個任務和功能,就是將手機銷售給各個渠道商代理;
- 我們說手機銷售給各個渠道商代理這個情景就是我們收集到的信息;
1.2 標識實體
我們說設計數據庫的第二個步驟就是標識實體;這里jacky解釋下實體的含義,實體可以使有形的事物,比如說人或產品;也可能是無形的事物,比如說金融交易、公司的部門等等。
設計數據庫就要在我們的系統中標識出這些實體,那么給我們手機銷售給渠道商這個特定場景標識下實體;
- 手機和渠道商
這里jacky特別強調兩下:
實體一般是名詞,一個實體只描述一件事情,不能重復出現含義相同的實體;
數據庫中的每個不同的實體都擁有一個與其相對應的表,按照我們舉例的需求,在手機銷售管理的數據庫中,因為有手機和渠道商兩個實體,所以至少有手機表和渠道商表這兩張表,再深入的解釋,jacky下次課分享,本課時,大家先做一個了解;
1.3 標識每個實體需要存儲的詳細信息
在標識實體后,我們接下來就要標識每個實體存儲的詳細信息,也就是實體的屬性,這些屬性將組成表中的列;比如案例中手機的屬性有商品編碼、商品名稱、單價這3個屬性;渠道商有渠道商編碼和渠道商姓名2個屬性
1.4 標識實體之間的關系
關系數據庫有一項非常強大的功能,就是它能夠關聯數據庫中各個項目的相關信息,那么我們給定的手機銷售給渠道商這個任務中,把手機和渠道商關聯起來的就是銷售,大家說是不是;
(二)概要設計-繪制E-R圖
我們說每個行業都有各自不同的圖形化表達方式:機械行業需要機械制圖,建築行業需要施工圖,那么我們數據庫設計也需要圖形化的表達方式——E-R圖,我們也叫實體-關系圖,
拿手機銷售公司為例,數據庫設計就是要把現在公司的銷售管理現狀制作成模型,這樣才便於分析,這個分析中使用的模型就“E-R模型”
2.1 如何繪制
E-R圖以圖形的方式將數據庫的整個邏輯結構表示出來;E-R圖的組成包括以下幾個部分:
矩形:表示實體集;
橢圓:表示屬性;
菱形:表示聯系集;
直線:用來連接屬性和實體集,也用來連接實體集和聯系集
2.2 案例實操
我們看一下這張E-R圖,手機這個實體有三個屬性,分別是商品編碼,商品名稱和單價,渠道商這個實體有兩個屬性,分別是渠道商編碼和渠道商名稱;這個
手機和渠道商之間就是由手機賣給渠道商這件事聯系起來的,這時就可以把“銷售”作為關系來考慮了

- 我們再來看這個E-R圖,,這個M與N是什么意思呢?就是M種品牌手機銷售給N個渠道商,這時我們也可以通過E-R模型分析出手機與渠道商之間存在着多對多的關系,我們給這種實體之間的對應個數一個更學術一點的名稱,就是“基數”;
上面就是本課時的分享,謝謝大家
(三)具體設計-三范式
2.1基礎鋪墊
2.1.1 第一范式(1NF)
- 數據庫的列不可分割,如果有的列包含多種信息,可以把它抽取出來成為一個單獨的表;
2.1.2 第二范式(2NF)
- 數據表中的每一行,都應該有唯一的標識,即每一行都應有主鍵區分
2.1.3 第三范式(3NF)
- 數據表中的所有非關鍵字段,必須依賴於主鍵
2.2 三范式的核心邏輯
數據庫的核心思想
- 為了數據的存儲
三范式的核心思想
- 不要出現冗余數據(用最少的空間存儲最多的信息),第二范式是避免了冗余行的出現,第三范式是避免了冗余列的出現;
