熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

SQL實戰新手入門:再探JOIN

2013-11-13 12:43:53  來源: SQL語言 

  章 組合數據集

  回顧第章可知關系型數據庫規范化的過程就是分解數據使之具有最大的精確度同時又具有最小重復的過程通過在多個包含數據的表之間建立關系就可以在很大程度上實現規范化的目標關系是通過使用特定的值也稱為鍵來建立的每一條記錄的鍵值在整個表中是唯一的

  關系理論中那些正式的術語可能會讓人感覺非常難以理解在本書中筆者將使用友好的術語例如表行(記錄)和列它們對應的正式術語分別為關系元組和屬性

  關系模型可以很好地維護數據並盡可能地減少數據的不一致性但是當實際使用數據時關系模型並不是那麼友好在著手開始烹饪一桌菜肴之前廚師通常會將所有的配料都擺放齊全然後根據做菜的規則將它們烹饪在一起數據庫的用戶也必須完成類似的工作考慮好想要訪問哪些數據然後從各個表中取回所有必要的數據並將其放在一個臨時的結構或數據集中這一工作是由JOIN關鍵字來完成的前面的章節已經簡要地介紹過該關鍵字

   再探JOIN

  RDBMS中的數據保存在各個表中這些表通過關系鏈接起來數據模型規范化的程度越高表與表之間的鏈接數量也就越多

  通常情況下為了生成相關的數據從中獲取數據的各個表(源表)是鏈接或聯接在一起的對於其中的某個表例如LIBRARY數據庫中的BOOKS表每一個數據行必須具有一個唯一的鍵值(即必須唯一地標識每一個數據行)對於另外一個表例如LOCATION表則具有某個列用於保存BOOKS表中的鍵值該列的功能是保存BOOKS表的外鍵

  圖中BOOKS表與LOCATION表的關系可以進一步用圖中的實際數據進行分析其中的各條連線指出了這兩個表之間的關系(由於不允許存在孤立記錄因此LOCATION表中的每一個數據行在BOOKS表中都具有一個對應的數據行反之則並非如此父表中可以包含在子表中沒有對應記錄的行根據最佳實踐的規則每一個表都分別具有一個主鍵BK_ID和LOC_ID而LOCATION表還具有一個外鍵FK_BK_LOC)

  在圖展示的例子中BOOKS表與LOCATION表的關系是通過BOOKS表中的BK_ID(主鍵)和FK_BK_LOC(LOCATION表中對應的外鍵)來建立的在BOOKS表的數據行與LOCATION表的數據行之間是一個一一對應的關系但情況並非總是如此當我們具有同一本圖書的多個副本時LOCATION表中的一個或多個行就可能包含BOOKS表中該本圖書多個的相同鍵值當然在BOOKS表中也可能有一些行在LOCATION表中根本沒有與之匹配的記錄(例如一本新的圖書還沒有在書櫃中指定固定的位置)因此在LOCATION表的FK_BK_LOC列中並沒有這本新圖書的外鍵值(即該列包含NULL值)另外一個值得注意的問題是LOCATION表可能包含了多個不同表的外鍵

  為了簡單起見在上面的例子中我們假定這些表的主鍵僅包含一個列前面曾介紹過主鍵並非總是只包含一個列主鍵可以是一個包含多個列的復合主鍵此時外鍵也可由多個列共同組成只要列組合的值在表中是唯一的並且沒有任何一個列包含NULL值那麼這些列的組合就可以作為有效的候選主鍵

  例如LIBRARY數據庫中的BOOKS_AUTHORS表既包含了BOOKS表的外鍵又包含了AUTHORS表的外鍵顯示了如何通過一個中間表來解決多對多關系的問題

  表 分解N:N關系

  在一個規范化的數據庫中嚴格地減少數據冗余是有代價的它增加了在規范化數據庫中導航的復雜性為了將一個作者關聯到一本圖書必須通過一個中間表使用主鍵和外鍵作為唯一的向導才能從這兩個表(或者多個表)中組裝出我們所需的數據集

  表可以以多種方式聯接起來下面的小節將討論聯接的方式

       返回目錄SQL實戰新手入門

       編輯推薦

       Oracle索引技術

       高性能MySQL

       數據倉庫與數據挖掘培訓視頻教程


From:http://tw.wingwit.com/Article/program/SQL/201311/16475.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.