1、E-R模型的基本概念與表示
1)實體與實體集
(1)實體:可以是有形的、實在的事物(如每個員工),可以是抽象的、概念上存在的事物(如一個部門)。
(2)實體的特征:獨立存在、可區別於其他實體。
(3)實體集:具有相同類型及相同性質的實體集合。實體集可以相交(例如銷售部門員工既屬於銷售員工實體集也屬於員工實體集)。
2)屬性
(1)屬性:實體集中每個實體都具有的特征描述。
(2)屬性的域:一個屬性所允許的取值范圍或集合。
(3)屬性的分類:
簡單屬性和復雜屬性:
簡單屬性:不能再分的屬性。復雜屬性:可以進一步划分的屬性(如住址的成分街道可以划分為街道編號、街道名稱)。
多值屬性的處理:將多值屬性轉化為多個單只屬性進行表示、將多值屬性單獨看做一個弱實體集,依賴於原實體集存在。
弱實體集:一類實體集其屬性不足以形成主碼,必須依賴於其他實體集而存在。
強實體集:一類實體集其屬性可以形成主碼的實體集
標識實體集:弱實體集所依賴的強實體集。
標識聯系集:弱實體集與標識實體集相互關聯形成的聯系集。
標識實體集與弱實體集之間為“一對多”聯系集,弱實體在標識聯系集中全部參與。
單值屬性和多值屬性
某屬性對一個特定實體任何時候都只有單獨的一個值,稱為單值屬性(如員工編號),否則為多值屬性(如員工聯系方式)。
派生屬性
某屬性的值可以從其他相關屬性或實體派生出來(如年齡可以由當前日期和出生日期推算出來)。
3)聯系與聯系集
(1)聯系:指多個實體間的相互關聯。
(2)聯系集:同類聯系的集合。
(3)多聯系:多個實體集可以定義在一些相同的實體集上(如教師與學生之間有授課聯系集和指導聯系集)。
(4)實體的角色:實體在聯系中的作用,即用角色名來定義一個實體參與聯系的方式。
(5)聯系集的度:參與聯系集的實體集的數目(如選課聯系集涉及兩個實體集,為二元聯系集,度為2)。
4)圖形化表示
實體集---矩形、屬性---橢圓、多值屬性---雙橢圓、派生屬性---虛線橢圓、屬性和實體之間---連線、聯系集---菱形、弱實體集---雙矩形、標識聯系集---雙菱形、弱實體的部分碼---虛下划線。
2、約束
1)映射約束
(1)映射基數(二元聯系為例):實體集A中的一個實體通過聯系集R能同時與另一個實體集B中相聯系的實體數目。
一對一:A中的一個實體至多與B中的一個實體相聯系,B中的一個實體也至多與A中的一個實體相聯系。(如開發票聯系集是銷貨單實體集和發票是實體集之間的一對一聯系集)
一對多:A中的一個實體可以同B中的任意數目的實體相聯系,B中的一個實體至多與A中的一個實體相聯系。(如部門與員工)
多對一:A中的一個實體至多與B中的一個實體相聯系,B中的一個實體可以同A中的任意數目的實體相聯系。(如課程和學院)
多對多:A中的一個實體可以同B中的任意數目的實體相聯系,B中的一個實體可以同A中的任意數目的實體相聯系。(如學生和課程)
(2)圖形化表示
→表示指向參與聯系集中的一方實體集,—表示參與聯系集中的多方實體集。
2)碼約束
(1)實體集的碼
超碼:實體集中能夠唯一標識一個實體的一個或多個屬性的集合。
候選碼:超碼的任意真子集都不能稱為超碼,這種超碼稱為候選碼。
(2)聯系集的碼和屬性安置
二元聯系集的主碼選擇依賴於聯系集的映射基數:
一對一聯系集:主碼可以選擇參與聯系的任何一方實體集的主碼,屬性可安置在任意一方。
一對多(多對一)聯系集:主碼選擇多的一方實體集的主碼,屬性可安置在聯系集上,也可以安置在多的一方實體集上。
多對多聯系集:主碼由參與聯系的所有實體集的主碼組成,屬性只能安置在聯系集上。
3)依賴約束:指聯系中一種實體的存在依賴於該聯系集中聯系或其他實體集中實體的存在。
(1)實體集與聯系集之間的依賴約束:聯系中一種實體的存在依賴於該聯系集中聯系的存在,並將依賴於聯系集而存在的實體集稱為依賴實體集。(如銷貨單實體集與商品銷售聯系集,銷貨單為依賴實體集)
(2)實體集之間的依賴約束:聯系中一種實體的存在依賴於其他實體集中實體的存在,並將依賴於其他實體集而存在的實體集稱為弱實體集。(如開課班實體集依賴於課程實體集)
4)參與約束
5)多值聯系:指在同一個給定的聯系集中,相關聯的相同實體之間可能存在多個聯系。
3、簡化的大學選課系統的E-R圖
其中:ISA關系可從兩個方向進行設計:
從自上而下方向,先設計學生實體集,再根據屬性的不同,將學生具體化為本科生和研究生,研究生進一步具體化為碩士研究生和博士研究生;
自下而上方向,先設計出研究生和本科生,在提取公共屬性,泛化為學生。
4、將上圖中部分轉化為關系模式
1)表示方法:加下划線的屬性表示它為主碼成員;斜體表示外碼成員
1)由實體集轉化而來的關系模式
(1)學院實體集:institute(instituteno,institutename,instituteaddress)
(2)課程實體集:course(courseno,couresname,credithour,coursehour,priorcourseno,instituteno)
(3)時間安排弱實體集:timeschedule(courseno,cclassno,time,classroomno)
(4)開課班弱實體集:ourseclass(courseno,cclassno,year,semester,capacity,enrollnumber)
2)由聯系集轉化而來的關系模式
(1)選課聯系集:enroll(studentno,courseno,cclassno,score,teacherno,recorddate)
3)由多值屬性轉化而來的關系模式
(1)電話號碼多值屬性:phonenumber(studentno,pnumber)
4)由類層次轉化而來的關系模式
(1)研究生的實體集:graduate(studentno,direction,teacherno)