數(shù)據(jù)庫定義表之間關系帶圖_第1頁
數(shù)據(jù)庫定義表之間關系帶圖_第2頁
數(shù)據(jù)庫定義表之間關系帶圖_第3頁
數(shù)據(jù)庫定義表之間關系帶圖_第4頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、如何定義數(shù)據(jù)庫表之間的關系特別說明數(shù)據(jù)庫的正規(guī)化是關系型數(shù)據(jù)庫理論的基礎。隨著數(shù)據(jù)庫的正規(guī)化工作的完成,數(shù)據(jù)庫中的各個數(shù)據(jù)表中的數(shù)據(jù)關系也就建立起來了。在設計關系型數(shù)據(jù)庫時,最主要的一部分工作是將數(shù)據(jù)元素如何分配到各個關系數(shù)據(jù)表中。一旦完成了對這些數(shù)據(jù)元素的分類,對于數(shù)據(jù)的操作將依賴于這些數(shù)據(jù)表之間的關系,通過這些數(shù)據(jù)表之間的關系,就可以將這些數(shù)據(jù)通過某種有意義的方式聯(lián)系在一起。例如,如果你不知道哪個用戶下了訂單,那么單獨的訂單信息是沒有任何用處的。但是,你沒有必要在同一個數(shù)據(jù)表中同時存儲顧客和訂單信息。你可以在兩個關系數(shù)據(jù)表中分別存儲顧客信息和訂單信息,然后使用兩個數(shù)據(jù)表之間的關系,可以同時

2、查看數(shù)據(jù)表中每個訂單以及其相關的客戶信息。如果正規(guī)化的數(shù)據(jù)表是關系型數(shù)據(jù)庫的基礎的話,那么這些數(shù)據(jù)表之間的關系則是建立這些基礎的基石。出發(fā)點下面的數(shù)據(jù)將要用在本文的例子中,用他們來說明如何定義數(shù)據(jù)庫表之間的關系。通過Boyce-Codd Normal Form (BCNF對數(shù)據(jù)進行正規(guī)化后,產(chǎn)生了七個關系表:Books: Title*, ISBN, PriceAuthors: FirstName*, LastName*ZIPCodes: ZIPCode*Categories: Category*, DescriptionPublishers: Publisher*States: State*C

3、ities: City*現(xiàn)在所需要做的工作就是說明如何在這些表之間建立關系。關系類型在家中,你與其他的成員一起存在著許多關系。例如,你和你的母親是有關系的,你只有一位母親,但是你母親可能會有好幾個孩子。你和你的兄弟姐妹是有關系的一一你可能有很多兄弟和姐妹,同樣,他們也有很多兄弟和姐妹。如果你已經(jīng)結婚了,你和你的配偶都有一個 配偶一一這是相互的一一但是一次只能有一個。在數(shù)據(jù)表這一級,數(shù)據(jù)庫關系和上面所描述現(xiàn)象中的聯(lián)系非常相似。有三種不同類型的關系:一對一:在這種關系中,關系表的每一邊都只能存在一個記錄。每個數(shù)據(jù)表中的關鍵字在對應的關系表中只能存在一個記錄或者沒有對應的記錄。這種關系和一對配偶之間

4、的關系非常相似一一要么你已經(jīng)結婚,你和你的配偶只能有一個配偶,要么你沒有結婚沒有配偶。大多數(shù)的一對一的關系都是某種商業(yè)規(guī)則約束的結果,而不是按照數(shù)據(jù)的自然屬性來得到的。如果沒有這些規(guī)則的約束,你通??梢园褍蓚€數(shù)據(jù)表合并進一個數(shù)據(jù)表,而且不會打破任何規(guī)范化的規(guī)則。一對多:主鍵數(shù)據(jù)表中只能含有一個記錄,而在其關系表中這條記錄可以與一個或者多個記錄相關,也可以沒有記錄與之相關。這種關系類似于你和你的父母之間的關系。你只有一位母親,但是你母親可以有幾個孩子。多對多:兩個數(shù)據(jù)表里的每條記錄都可以和另一個數(shù)據(jù)表里任意數(shù)量的記錄(或者沒有記錄)相關。例如,如果你有多個兄弟姐妹,這對你的兄弟姐妹也是一樣(有多

5、個兄弟姐妹),多對多這種關系需要引入第三個數(shù)據(jù)表,這種數(shù)據(jù)表稱為聯(lián)系表或者連接表,因為關系型系統(tǒng)不能直接實現(xiàn)這種關系。建立關系在開始著手考慮建立關系表之間的關系之前,你可能需要對數(shù)據(jù)非常熟悉。只有在熟悉數(shù)據(jù)之后,關聯(lián)會比你剛開始的時候更明顯。你的數(shù)據(jù)庫系統(tǒng)依賴于在兩個數(shù)據(jù)表中找到的匹配值來建立關系。如果在數(shù)據(jù)庫系統(tǒng)中發(fā)現(xiàn)了一個匹配值,系統(tǒng)將從兩個數(shù)據(jù)表中提取數(shù)據(jù)并創(chuàng)建一個虛擬的記錄。例如,你可能想要查看某個特定的作者所寫的全部書籍,在本文中, 系統(tǒng)將從“ Books”和“ Authors ”這兩個數(shù)據(jù)表中查找相關的匹配值。需要注意的是,在大多數(shù)情況下,查詢的結果是動態(tài)的,這意味著對這條虛擬記錄

6、所做的任何改動都將可能作用到底層的數(shù)據(jù)表上,這一點是非常重要的。進行匹配的值都是主鍵和外鍵的值。(關系模型不要求一個關系必須對應的使用一個主鍵來確定。你可以使用數(shù)據(jù)表中的任何備選關鍵字來建立關系,但是使用主鍵是大家都已經(jīng)接受的標準。)主鍵(primary key)唯一的識別表中的每個記錄。而外鍵( foreign key)只是 簡單的將一個數(shù)據(jù)表中的主鍵存放在另外一個數(shù)據(jù)表中。同樣地,對于你來說也不需要做太多的工作一一只是簡單地將主鍵加到關系表中,并將其定義為外鍵。唯一需要注意的是,外鍵字段的數(shù)據(jù)類型必須和主鍵的數(shù)據(jù)類型相同。但是有些系統(tǒng)可以允許這條規(guī)則有一個例外,它允許在數(shù)字和自動編號( a

7、utonumbering )字段(例如在 SQL服 務器系統(tǒng)中訪問Identity 和AutoNumber)之間建立關系。此外,外鍵的值可以是空(Null ), 盡管強烈建議在沒有特別原因的情況下,不要讓外鍵為空。你有可能永遠都不會有機會來使用需要這項功能的數(shù)據(jù)庫?,F(xiàn)在回到我們的示例關系表,并開始輸入合適的外鍵。多請繼續(xù)在紙上打草稿一一在你的數(shù)據(jù)庫系統(tǒng)中創(chuàng)建真正的數(shù)據(jù)表還為時過早。要知道在紙上糾正錯誤要容易得多。)要記住, 你正在把主鍵的值添加到關系表里。只要調用實體之間的關系就行了,而其他的就簡單了: 書籍和分類是有關系的。書籍和出版社是有關系的。書籍和作者是有關系的。作者和郵政編碼(ZIP

8、)是有關系的。郵政編碼和城市是有關系的。城市和州是有關系的。這一步并不是一成不變的, 你可能會發(fā)現(xiàn)在規(guī)范化的過程中加入外鍵會更容易一些。在把字段移動到一個新的數(shù)據(jù)表時,你可能要把這個新數(shù)據(jù)表的主鍵添加到原來的數(shù)據(jù)表里,將其你會發(fā)現(xiàn)在所有作為外鍵。但是,在你繼續(xù)規(guī)范化剩余數(shù)據(jù)的時候,外鍵常常會發(fā)生改變。這些數(shù)據(jù)表被全部規(guī)范化之后,一次添加所有的外鍵,這樣效率會更高。操作數(shù)據(jù)表現(xiàn)在讓我們一次操作一個數(shù)據(jù)表,就從Books數(shù)據(jù)表開始,它在這個時候只有三個字段。很明顯,Authors、Categories 和Publishers 數(shù)據(jù)表的主鍵會被添加到Books里。當你完成的時候,Books數(shù)據(jù)表就有

9、了七個字段:BooksTitle (PK)ISBN (PK)PriceFirstNameFK (FK) Authors.FirstName many-to-manyLastNameFK (FK) Authors.LastName many-to-manyCategoryFK (FK) Categories.Category many-to-manyPublisherFK (FK) Publishers.Publisher one-to-many要記彳3E, Authors數(shù)據(jù)表里的主鍵是一個基于姓和名兩個字段的復合關鍵字。所以你必須要把這個兩個字段都添加到Books數(shù)據(jù)表里。要注意,外鍵字段名

10、的結尾包含有FK這個后綴。加入這個后綴有助于提高可讀性和自我歸檔。通過名稱這種方式來區(qū)別外鍵會使得追蹤它們更簡單。如果主鍵和外鍵的名稱不同,這沒有關系。這里出現(xiàn)了三種關系:Books 和 Authors、Books 和 Categories ,以及 Books 和 Publishers 。這三種關系中所存在的兩種問題可能沒有那么明顯:Books和Authors之間的關系:一本書可以有多個作者。Books和Categories之間的關系:一本書可以被歸入多個類。這兩者的關系是多對多的關系。先前我告訴過你,數(shù)據(jù)表不能直接實現(xiàn)這樣的關系,而需要第三個聯(lián)系表來實現(xiàn)。(Books和Publishers

11、的關系是一對多的關系,就像現(xiàn)在所說的, 這樣是沒有問題的。)這兩個新發(fā)現(xiàn)的多對多關系將需要一個聯(lián)系表來包含來自每個數(shù)據(jù)表的主鍵,并將其作為外鍵。新的聯(lián)系表是:BooksAuthorsmmlinkTitleFK (FK) Books.Title one-to-manyISBNFK (FK) Books.ISBN one-to-manyFirstNameFK (FK) Authors.FirstName one-to-manyLastNameFK (FK) Authors.LastName one-to-manyBooksCategoriesmmlinkTitleFK (FK) Books.Tit

12、le one-to-manyISBNFK (FK) Books.ISBN one-to-manyCategoryFK (FK) Categories.Category one-to-many沒有必要更改 Categories Authors或者Publishers 數(shù)據(jù)表。但是,你必須把FirstNameFK、LastNameFK和CategoryFK這三個外鍵從 Books里移走:BooksTitle (PK)ISBN (PK)PricePublisherFK (FK) Publishers.Publisher one-to-many現(xiàn)在,讓我們轉到 Authors數(shù)據(jù)表上來,它現(xiàn)在有兩個字

13、段。每個作者都和 ZIPCodes數(shù)據(jù) 表中的郵政編碼的值相關。但是,每個郵政編碼會和多個作者相關。要實現(xiàn)這種一對多的關系,就要把ZIPCodes數(shù)據(jù)表中的主鍵添加進Authors數(shù)據(jù)表作為外鍵:AuthorsFirstName (PK)LastName (PK)ZIPCodeFK (FK) ZIPCodes.ZIPCode one-to-many至此,你已經(jīng)準備好了處理剩下的地址部分了??吹剿鼈儽环衷诓煌臄?shù)據(jù)表里是很讓人奇怪的,但是這是遵照BCNFE確規(guī)范化數(shù)據(jù)的結果。每個郵政編碼的值只會有一個對應的城市值和州值。每個城市和州的值只會被輸入進其對應的數(shù)據(jù)表里一次。ZIPCodes和Cities數(shù)據(jù)表需要外鍵字段來實現(xiàn)這些關系:ZIPCodesZIPCode (PK)CityFK (FK) Cities.City one-to-manyCitiesCity (PK)StateFK (FK) States.State one-to-manyStatesState (PK)從一個到九個最后,你有了九個數(shù)據(jù)表:Books、Authors、Categories、Publishers、ZIPCodes、Cities、States、BooksAuthorsmmlink 和 BooksCategoriesmmlink 。圖 A是這個示例數(shù)據(jù)表的數(shù)據(jù)庫 最終的圖形形式。很難想像一個簡單的數(shù)據(jù)表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論