本節書摘來華章計算機《sql與關系資料庫理論——如何編寫健壯的sql代碼》一書中的第1章 ,第1.10節 c. j. date 著 單世民 何英昊 許侃 譯 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
總的來說,本章的目标是告訴你應該掌握的知識(是以你可能會覺得這一章沒講什麼技術内容)。咱們來簡略地回顧一下:
本章解釋了為什麼要關注原理而不是産品,還說明了為什麼本書不使用在sql中更為“使用者友好”的術語而要使用正式術語,比如,關系、元組和屬性(至少在關系理論中這些是正式術語)。
本章給出了原始模型的綜述,尤其涉及了以下概念——類型(域),n-元關系,元組,屬性,候選鍵(簡稱為鍵),主鍵,外鍵,實體完整性,參照完整性,關系指派以及關系代數(簡要提到了關系演算)。對于關系代數,提到了閉包性質且非常簡要地描述了限制、投影、積、交、并、差和連接配接。
本章讨論了關系的各種性質,介紹了術語标題、主體、基數和度。關系沒有重複元組,沒有從頂至底的元組排序,也沒有從左至右的屬性排序。本章還讨論了基關系(或者基關系變量)和視圖的差别。說明了元組的每個子集仍然是元組,标題的每個子集仍然是标題,主體的每個子集仍然是主體。
本章讨論了模型和實作之間的邏輯差異,一般而言的值和變量之間邏輯差異,關系和關系變量之間的邏輯差異。尤其是,關于模型 vs.實作的讨論還引出了關于實體資料獨立性的讨論。
本章指出了sql和關系模型并不是一回事。我們已經看到了一些差别(比如,sql允許重複行,sql表具有從左至右的列排序,sql不明确區分表值和表變量)。在後面的内容中,我們會看到更多的差别。
最後一點(這一點在以前沒有明确指出,但是希望從之前的内容中能夠明确此點)。總體而言,關系模型本質上是聲明式的而不是過程化的。也就是說,隻要方案是可行的,關系模型總是喜歡聲明式的解決方案甚于過程化的解決方案。原因很明顯:聲明式方案意味着由系統負責具體運算,而過程化方案則意味着由使用者負責具體運算(是以我們談論生産力問題)。這也就是為什麼關系模型支援聲明式查詢、聲明式更新、聲明式視圖定義、聲明式完整性限制等等。
注意:在第一次寫完此章後,我注意到至少有一個知名sql産品明确使用“聲明式”術語來表示“系統不做工作”。也就是說,它允許使用者聲明式地表述一些内容(比如某個視圖有某個鍵),但是卻并不強制聲明所隐含的限制;相反,它隻是假設使用者要強制限制成立。如算此濫用術語無助于形成真正的了解。讀者要擦亮眼睛。