第七章 資料庫設計與e-r模型。
當inst -dept的模式被合併到instructor時,即新增到instructor關係中。
實體關係設計問題
實體集和關係集的概念並不精確,並且可以通過多種不同的方式定義一組實體和它們之間的關係。在本節中,我們將研究e-r資料庫模式設計中的基本問題。第7.10節詳細介紹了設計過程。
7.7.1實體集與屬性的使用。
考慮使用附加phone number的實體設定instructor (圖7.17a)。可以很容易地認為,手機本身就是乙個實體,它擁有phone number 和 location;該地點可能是phone所在的辦公室或住宅,手機(手機)可能代表「移動」。「如果我們採用這個觀點,我們就不會將hone number新增到instructor。」相反,我們建立:
•乙個帶有
phone number
和location屬性的
phone
實體。•
設定一種
inst phone關係,表示
instructor
和他們的
phone
之間的聯絡。
此選項如圖
7.17b
所示。那麼,
instructor
的這兩種定義有什麼區別呢
?把phones當作乙個屬性
phone -number
,意味著
instructor
們每個人都有乙個
phone -number
。把phones當作實體**來處理,可以讓教師有幾個
phone -number
(包括零
)與他們聯絡。
但是,我們可以很容易地將
phone -number
定義為乙個多值屬性,允許每個
instructor
使用多個phones。
主要的區別是,把phones當作乙個實體更好地模擬一種情況,乙個人可能想要保留phones的額外資訊,比如它的位置,或者它的型別
(手機,
ip**,或者普通的舊手機
),或者所有的人共享phones。
因此,將phones作為乙個實體來處理,比將其作為乙個屬性來處理更普遍,並且在一般性可能有用的情況下是適當的。
相比之下,處理屬性名(of an instructor)
是不合適的。作為乙個整體
;很難說名字本身就是乙個實體
(與**相比
)。因此,將名稱作為講師實體集的屬性是合適的。
因此產生了兩個自然的問題:什麼是屬性,什麼是屬性構成的乙個實體集呢?不幸的是,沒有簡單的答案。區別在於建模的實際企業的結構,以及與該屬性相關的語義。
乙個常見的錯誤是使用實體集的主鍵作為另乙個實體集的屬性,而不是使用關係。例如,即使每個instructor只建議乙個student,但將學生的id建模為instructor的屬性是不正確的。relationship advisor是表示student和instructor之間的連線的正確方法,因為它使他們的連線顯式,而不是通過屬性隱式的。
人們有時會犯的另乙個相關錯誤是將相關實體集的主鍵屬性指定為關係集的屬性。例如,id (student的主鍵屬性)和id(instructor的主鍵)不應該作為關係顧問的屬性出現。這是不應該做的,因為主鍵屬性已經隱含在關係中。
7.7.2 use ofentity sets versus relationship sets
在圖7.15中,我們使用了「take relationship set」來模擬乙個學生學習(section of a)課程的情況。另一種選擇是想象每個學生都有乙個課程註冊記錄。
然後,我們有乙個實體集來表示課程註冊記錄。我們稱這個實體為集合註冊。每個註冊實體都與乙個學生和乙個部分相關,因此我們有兩個關係集,乙個將courseregistration記錄與學生聯絡起來,另乙個將課程註冊記錄與部分聯絡起來。在圖7.18中,實體集的部分和學生由圖7.15所示,由乙個實體集和兩個關係集取代的關係集:
• 註冊,代表課程註冊記錄的實體集。
• 第二部分,註冊與課程的關係設定。
• student reg
, 與註冊和學生相關的關係。
注意,我們使用雙行表示註冊實體的完全參與。
圖7.15和圖7.18的方法都準確地代表了大學的資訊,但是使用的方式更緊湊,可能更可取。然而,如果登記官辦公室將其他資訊與法庭登記記錄聯絡在一起,最好把它作為乙個實體。
確定是否使用實體集或關係集的乙個可能的指導原則是,指定一種關係集來描述實體之間發生的操作。這種方法還可以用於判斷某些屬性是否可以更恰當地表示為關係。
7.7.3對n-ary關係集。
資料庫中的關係通常是二進位制的。一些看似非二進位制的關係實際上可以用幾個二進位制關係來表示。例如,乙個人可以建立乙個三元關係的父母,把乙個孩子和他/她的父母聯絡起來。然而,這種關係也可以由兩種二元關係來表示,即父母,將乙個孩子與他/她的母親和父親分開。使用這兩種關係,母親和父親為我們提供了孩子母親的記錄,即使我們不知道父親的身份;如果使用三元關係父,則需要乙個空值。在這種情況下,使用二進位制關係集更好。
事實上,總是可以用一些不同的二進位制關係集來替換乙個非二進位制 (n-ary, for n > 2)關係。為簡單起見,考慮抽象三元關係集r,關聯實體集a、b和c。我們用實體集e替換關係集r,並建立3個關係集,如圖7.19所示:
• ra,關於
e和a。
• rb,關於
e和b。
• rc
, 關於e和
如果關係集r具有任何屬性,則將這些屬性分配給實體集e;此外,為e建立了乙個特殊的標識屬性(因為必須能夠根據其屬性值來區分實體中不同的實體)。對於關係集r中的每一段關係(ai, bi, ci),我們在實體集合中建立乙個新的實體ei,然後,在這三個新的關係集合中,我們插入一段關係如下:• (
ei ,
ai) in ra.
• (ei ,
bi) in rb.
• (ei ,
ci) in rc.
我們可以用簡單的方式將這個過程概括為n-ary關係集。因此,從概念上講,我們可以將e-r模型限制為只包含二進位制關係集。然而,這種限制並不總是可取的。
•為表示關係集建立的實體集可能需要建立乙個標識屬性。該屬性與所需的額外關係集一起增加了設計的複雜性,
(如我們將看到
insection 7.6)
的總體儲存需求。
• n-ary
關係集更清楚地顯示了幾個實體參與一段關係。
•可能沒有辦法將三元關係的約束轉化為對二元關係的約束。例如,考慮乙個約束,該約束說
r是多對一,從
a, b到c;
也就是說,
aand b
中的每一對實體都與最多乙個
c實體關聯。這個約束不能通過使用關係集ra、
rb和rc的基數約束來表示。
請考慮在
7.2.2
節中設定的關係集
proj
指南,相關的指導老師、學生和專案。我們不能直接將
proj
指南劃分為教師和專案之間的二元關係,以及教師和學生之間的二元關係。如果我們這樣做
,通過建立如上所述的新實體集,可以將關係集
proj
指南拆分為二進位制關係。然而,做索道不是很自然的事。
7.7.4 位置的關係屬性
關係的基數比可以影響關係屬性的位置。因此
,一對一或一對多關係集的屬性可以被關聯到乙個參與的實體集
,而不是關係。例如
,我們指定顧問是一對多的關係
,乙個老師可能建議幾個學生
,但可以建議每個學生只有乙個老師。在這種情況下,屬性日期,它指定當教師成為學生的顧問時,可以與之關聯。學生實體設定,如圖
7.20
所示。(
為了保持圖的簡單性,只顯示了兩個實體集的一些屬性。
)因為每個學生實體參與導師的關係最多乙個例項
,使這個屬性指定具有相同含義
aswould
放置日期與顧問關係確定。一對多關係的屬性集只能重新定位
,以實體集「許多」的關係。對於一對一的關係集,另一方面,關係屬性可以與任何乙個參與實體關聯。
在這種情況下,將描述性的屬性放置在關係或實體屬性中的設計決策應該反映出被建模企業的特徵。設計者可以選擇保留日期作為顧問的乙個屬性,明確表示日期指的是諮詢關係,而不是學生的大學地位的其他方面
(例如,接受大學的日期)。
他選擇的屬性位置對於多對多關係集更加明確。再回到我們的例子之中,讓我們指定乙個可能更現實的情況,老師是多對多關係的集合,這是表示老師可以指導乙個或多個學生,乙個學生可以被乙個或多個老師指導。如果我們要表達某個特定的老師成為某一特定學生的老師的日期,那麼日期必須是老師的乙個屬性關係集,而不是乙個參與其中的任何東西。例如,如果日期是學生的乙個屬性,我們就不能確定哪位老師在特定的日期成為了他的指導老師。當乙個屬性由參與實體集的組合而不是單獨的實體來決定時,該屬性必須與多對多關係集關聯。同樣,為了保持圖的簡單,只顯示了兩個實體集的一些屬性。
集訓第三週
又要感嘆時間過得真快了,8月13號,距離第一場網路賽還有26天。暑假三周集訓結束,個人賽也結束了,這一周還是做了一些個人賽,然後組好了隊伍。去年一隊有2個人算是 實力超群 比其餘人都高乙個檔次。而今年大家的水平都差不多,沒有像去年他們那麼突出,實力自然有不小的下降。相比去年的隊伍,今年隊的特點是大家...
第三週作業
實驗作業 1.輸入課本各個例題,除錯執行程式,並分析程式,將每乙個程式改寫2到3個版本,自己分析程式結果,然後再除錯執行,核對分析結果的對錯。2.編寫程式輸入乙個三角形的三條邊,計算其面積和周長 3.編寫程式計算並輸出課本本章習題3表示式的值並分析結果。4.編寫乙個程式,輸入乙個一元二次方程的三個係...
第三週作業
要求 1.輸入課本各個例題,除錯執行程式,並分析程式,將每乙個程式改寫2到3個版本,自己分析程式結果,然後再除錯執行,核對分析結果的對錯。2.編寫程式輸入乙個三角形的三條邊,計算其面積和周長 3.編寫程式計算並輸出課本本章習題3表示式的值並分析結果。4.編寫乙個程式,輸入乙個一元二次方程的三個係數,...