關係型資料庫設計/簡介
計算機程式對資料進行操作以產生結果。程式可以在執行時將這些資料儲存在記憶體中,但通常我們需要資料在程式的生命週期結束後繼續存在,或者在程式執行的多個例項之間共享資料。程式設計師可以為每個新程式編寫新的資料儲存程式碼,但這會導致重複工作,因為每次的程式碼都非常相似。從最廣泛的角度來看,資料庫技術關注的是解決儲存、管理和檢索資料的通用解決方案。
從計算機科學的角度來看,我們可以簡單地說 資料庫是一組連貫的資訊。而資訊則是資料的加工形式。資料庫主要關注的是結構化資料:按照某種規律模式儲存的資料,使計算機能夠過濾和處理資料,並推斷出在最初輸入資料中沒有明確規定的問題的答案。一個能夠儲存資訊並以未修改的形式返回資訊的程式(例如檔案系統)通常不會被視為資料庫。
關於資料庫最普遍的理解是,它是一組關於世界的真相。您想知道某個事實是否為真(例如“Jim 是 MultiWidget Corp 的客戶經理嗎?”)或在某個事實中缺少的是什麼(例如“烏干達的首都是哪裡?”)。您可以將您的問題轉換成適合您的資料庫的形式,然後資料庫可以給出答案。資料庫在您提出問題的方式以及哪些問題可以有效地得到回答方面有很大的差異,但在某種抽象的層面上,它始終遵循這種模式。
資料庫的目標是提供通用的資料管理解決方案,因此作為資料庫軟體的設計者,您希望系統能夠在儘可能多的情況下使用,而無需針對客戶的應用程式進行定製。然而,關於世界的一般性事實以各種不同的形式出現。同一款軟體如何能夠處理從人際關係到工業過程的方方面面,而不會變得極其複雜?
解決方案在於資料模型:一組規則、假設和約定,幫助將現實世界中的鬆散概念透過有限數量的可重用概念轉換為計算機中有限且客觀的模型。關係模型是最廣為人知和商業上最成功的幾種資料模型之一,但它並非唯一的資料模型。
關係型資料庫是一種將資料組織成表、行、屬性和域的集合的資料庫。謂詞邏輯用於描述資料庫中包含的資訊,並用於從資料庫中查詢資訊。(參見維基百科:關係模型)
我們可以從非常直觀的描述到精確的數學形式化,在幾個不同的層面上討論資料庫。在討論資料庫時,通常存在一種在可理解的寫作方式和形式上正確的寫作方式之間的矛盾。在這本書中,我們將盡力保持對理論的忠實,但不會以犧牲理解力為代價。必要時,這將涉及對某個主題進行更鬆散的直觀討論(這可能包含一些技術上不正確的內容),以在更正式地處理該主題之前建立一個理解水平。
在選擇示例來說明特定要點時,也存在類似的矛盾。關於構成良好資料庫設計的規則有很多,但通常遵循這些規則會導致示例變得複雜,從而更難理解。在這本書中,我們將重點關注能夠很好地說明所討論點的示例,並相信讀者能夠理解與討論主題無關的示例中的設計選擇不一定需要遵循。
關係模型是迄今為止最廣泛實現的資料模型,但絕大多數實現都是基於結構化查詢語言 (SQL)。SQL 標準在幾個重要方面未能完全遵循關係資料模型,例如允許表中出現重複行。由於沒有任何商業級資料庫工具使用關係模型的純淨形式而不使用 SQL,因此許多書籍將關係模型和 SQL 視為不可分割的,並淡化了它們之間的矛盾。
本書將用 SQL 術語討論關係設計,但也將指出關係模型應該以不同的方式運作的地方。