跳轉到內容

關係型資料庫設計/基本概念

來自華夏公益教科書,開放書籍,構建開放世界

集合論

[編輯 | 編輯原始碼]

關係型資料庫理論建立在集合的數學理論之上。在數學中,集合是考慮多個物件的最普遍方式之一,並且已經建立了大量的理論來描述這一點。您不需要了解太多集合論就可以理解關係型資料庫,但掌握基本概念會有所幫助。

集合僅僅是一個包含零個或多個物件的集合,所有這些物件都是不同的,沒有任何其他結構。以下是集合:

注意,定義說零個或多個:一個包含零個成員的集合仍然是一個集合,即使它是空的。包含零個元素的集合用一對空括號表示,通常用符號表示。

如果兩個集合包含完全相同的元素,那麼它們就是相同的集合。除了它包含的元素之外,沒有其他任何東西可以區分一個集合與其他集合。元素的順序並不重要,因此無論我們選擇以什麼順序寫元素,集合都是相同的。

任何東西都可以放入集合中,而不僅僅是諸如數字之類的數學概念。您可以擁有所有美國總統的集合,並在集合論中與任何其他集合一樣處理它。

甚至集合也可以是集合的成員。

集合可以是無限的,例如所有正整數的集合。

名稱和物件

[編輯 | 編輯原始碼]

資料庫在告訴我們有關現實世界的資訊時非常有用。但現實世界中的事物以一種模糊的方式被處理,這可能會在我們將其轉換為資料庫模型時讓我們感到困惑。

名稱就是一個很好的例子。當我們需要引用某件事時,我們會給它一個名字。人們往往不會想到這一點,但名稱與物件不是一回事。“馬克·吐溫”是一個字串,我們通常用它來指代作家馬克·吐溫,但這兩者並不相同:“馬克·吐溫”包含十個字元,但不能說馬克·吐溫包含十個字元。

同一個物件也可能有多個名稱。“馬克·吐溫”和“塞繆爾·克萊門斯”都是可以理解為指代《湯姆·索亞歷險記》作者的字串。

這很重要,因為您無法將現實世界中的物件放入資料庫中,只能放入識別它們的少量資訊。您希望選擇對每個物件唯一的識別資訊,並且不能混淆,但這往往比最初看起來更難。如果您的物件識別方法模糊,那麼無論您的資料庫多麼嚴格,您得出的結論仍然會是模糊的。

實體和類

[編輯 | 編輯原始碼]

資料庫指的是現實世界中的物件,但並非總是以相同的方式。記錄汽車經銷店銷售額的資料庫可能會跟蹤銷售的個別汽車,以便我們確切地知道哪輛汽車賣給了哪個客戶。另一方面,為製造商網站執行的資料庫可能處理有關車型整體的資訊,即有關這類汽車的整個的資訊。

這一點很重要,因為語言並不總是能清楚地表達出來。“喬·史密斯昨天買了一輛福特蒙迪歐”使用的語言與“一輛福特蒙迪歐有四個輪子”相同,但前者指的是一輛具體的汽車,而後者是關於所有福特蒙迪歐的一般性陳述。即使不存在福特蒙迪歐(例如,在設計了該車型後,但在製造之前),後一種說法也可能是正確的。不要讓語言迷惑你,從資料庫設計的角度來看,它們是完全不同的。

目前使用兩組關係型資料庫術語。關係理論的最初開發者從理論的角度來解決這個問題,並使用來自集合論和形式邏輯的術語。這些術語從未在從業人員中流行起來,他們更喜歡使用更直觀和更實用的術語,這些術語最終被納入 SQL 標準。

關係型術語 SQL 等效項
關係,基關係變數
派生關係變數 檢視,查詢結果,結果集
元組
屬性

大多數關於資料庫的現代出版物使用下面描述的 SQL 術語,但您應該注意不同的術語。術語對並非完全同義詞,因此一些關係理論作家(例如 Chris Date 和 Fabian Pascal)更喜歡使用嚴格的關係術語。

域是列允許的資料值集。例如,客戶實體上的 FiveDigitZipCode 列可以位於整數域中。因此,資料庫將不允許您將 123.45(浮點數)或 ABC(字元)等值放入該列。

一些作者在型別之間進行了區分,因為型別是構建到資料庫管理系統 (DBMS) 中的基本概念(例如字串、整數、浮點數),而域可以具有有關哪些值可接受的附加業務規則。例如,如果您有一個數據庫儲存十柱保齡球的分數,遊戲的得分將是整數型別,但遊戲的規則(不可能得分超過 300)意味著分數的域將是 0 到 300 之間的整數。域上的附加約束使得將錯誤資料插入資料庫變得更加困難。

列是描述資料庫模型中實體的屬性。例如,客戶實體可能具有 地址城市FiveDigitZipCode 等屬性。

行是描述您要建模的實體的一組完整列。

表是行的集合,充當實體的邏輯分組。

資料庫

[編輯 | 編輯原始碼]

相關表的集合以及任何支援物件(例如儲存過程)通常稱為資料庫(或模式)。多個數據庫通常在邏輯上彼此分離。

術語“資料庫”有時鬆散地用於指代管理資料庫的軟體。為了避免歧義,在更正式的上下文中,通常將軟體稱為資料庫管理系統或 DBMS——或更具體地說是關係資料庫管理系統或 RDBMS。

元數是指表中列的數量。如果表有五列(如上面的客戶實體),我們說它的元數為 5。

基數是指集合中元素的數量。在關係資料庫環境中,這通常意味著表中行的數量(因為表可以被視為一組行)。表的基數基於表中的行。例如,Employee 表可能每個員工只有一行,基數為 1。員工可能擁有 3 部手機,手機、工作和家庭。手機表對該員工的手機將具有 3 的基數。

華夏公益教科書