大家好,上節介紹了Access資料庫表設計的基本步驟,那麼在實際建表中,如何去應用概念模型、資料庫範式,以及建立表關系等,通常會結合考慮。但初學者會先分開去探讨。本節主要介紹概念模型中常用的E-R模型。
一、概 念 模 型
在介紹本節主要内容,首先簡單說下概念模型的了解。
對于模型,大家應該都知道樂高積木、玩偶、手辦等,搭建的積木可以表示現實世界中的事物,玩偶和手辦也多是以現實的人或者事物作為參照來按比例創造的,它們可以算是一些實體的模型,可以代表一些實際中的東西。
那麼如果隻用名詞和概念來描述現實世界中的某種事物呢?大家都知道百科全書中有各種名稱和概念,比如蘋果名詞就指現實中的蘋果,水果則表示現實中所有的水果,包括蘋果。
那麼隻用這些名詞和概念可以把現實世界抽象表達出來,并且這些名詞和概念的互相聯系。它們就可以組成一個概念模型。是以概念模型就是從現實世界到資訊世界的一層抽象。
二、E-R 模 型
本節主要介紹最常用的概念模型,即實體-聯系(Entity-Relationship)方法。E-R方法稱為E-R模型。它可以運用E-R圖來描述現實世界。在E-R模型中主要包括三個内容:
1、實體,即現實中客觀存在并互相差別的事物。E-R圖中用矩形表示。
比如一本書、一輛小轎車、一個學生等。在資料庫中出現都是實體的名稱、辨別符以及一部分屬性。
2、屬性,即實體具體的某一特征。E-R圖中用橢圓形表示。
比如書的作者、出版社、定價、出版日期等。轎車的價格、大架号。學生的學号、年齡、性别等等。通過屬性的差異,可以使同一類實體的不同個體差別開來。
3、聯系,即實體與實體間的聯系。有三種對應關系:一對一的關系、一對多的關系(1對N)、和多對多的關系(M對N)。E-R圖中用菱形表示。
在現實世界中,事物之間的互相關系,反應在資料庫中就是實體(集)和實體(集)之間的聯系。例如讀者和書本之間是“借閱”的聯系、
三、E-R 模 型 示 例
下面對建立資料庫需求簡單分析,再套用E-R模型來舉例。(為了介紹友善示例盡量簡化)
通過需求分析歸納出資料庫中的實體,主要有圖書、讀者、出版社,根據每個實體和屬性都可以建立成一張表。下面依次來看每個實體的屬性,如果有符合主鍵條件的屬性可以先作為暫定主鍵。
1、”圖書“實體、屬性
它的屬性主要有“書号”、“書名”、“作者”、“單價”、"出版社"等,其中“書号“不重複不為空”可以暫定為主鍵。(同樣的圖書,通常共用同一個書号)E-R圖如下圖所示:

2、”讀者“實體、屬性
它的屬性主要包含“會員号”、“姓名”、“性别”、“年齡”、”聯系方式“等等。其中“會員号”可以作為主鍵。E-R圖如下圖所示:

3、”出版商“實體、屬性
它的主要屬性包含“出版商号”、“名稱”、“聯系方式”。其中“出版商号“可以作為主鍵。E-R圖如下:

4、聯系
在分析了每個實體和屬性之後,下面就是分析實體之間的聯系。這是相對難了解的一點。
上面已經說明:實體與實體的之間的聯系,有三種對應關系:一對一的關系、一對多的關系(1對N)、和多對多的關系(M對N)。
其中如果是多對多關系時,通常需要增加中間表,與原來的其他實體的表形成一對一或者一對多的關系。進而減少資料重複。
在示例中,”出版商"與"圖書"之間“出版“的聯系,這種聯系是一對多的關系,比如一個出版商可以出版多本圖書,"讀者"和"圖書"之間是"借閱"的關系。(圖書館中通常一個書号有多本同樣的書。)一個讀者可以借閱不同書号的書,一個書号的幾本圖書可以被不同的讀者,是以借閱是多對多的關系。
因而上面根據三個實體建立三張表并不足夠,因為還有多對多的關系需要建立中間表來拆分,實體間聯系的E-R圖示如下:

“借閱”這個聯系也有新的屬性,讀者借閱時,會生成“借閱編号”、“借出日期“、”應還日期“等,主要的E-R圖如下:

将上述所有圖檔整合起來就可以形成一個完成E-R圖,通過以上的E-R圖模型的套用,在Access中分出來以下4張表。
1、圖書表:書号、書名、作者、單價、出版商号
2、讀者表:會員号、姓名、年齡、聯系方式
3、出版商表:出版商号、名稱、聯系方式
4、借閱表:借閱編号、借出日期、應還日期
這樣設定表的屬性還不完整,因為設定“借閱表”的目的拆解圖書和讀者之間多對多的關系,讓它變成一對一或者一對多的關系,将不同圖書和讀者表關聯起來。
是以要在借閱表中加入,是書号和讀者号,它們分别是其他兩個表的主鍵,在借閱表中他們被稱為外鍵,後面會再介紹。那麼最後确定的4張表屬性如下。
1、圖書表:書号、書名、作者、單價、出版商号
2、讀者表:會員号、姓名、年齡、聯系方式
3、出版商表:出版商号、名稱、聯系方式
4、借閱表:借閱編号、借出日期、應還日期、書号、會員号
這樣圖書表和借閱表通過“書号”一對一關聯,讀者表和借閱表通過“會員号”一對一關聯起來,進而讀者表和圖書表間接關聯起來。出版商表則和圖書表可以一對多關聯,後續會介紹如何在Access中将表關聯起來。