學習關係代數背後的實際原因是什麼?
學習如何在關係代數中製定類似查詢的表達式是許多(也許是大多數)“數據庫簡介”課程的傳統部分。
關係代數通常是關係數據庫的數學基礎,尤其是 SQL 的數學基礎,這通常是合理的,這意味著了解它很重要。
然而,在我看來,在關係代數中製定表達式與在 SQL 中製定查詢基本相同,並且這兩項任務的思維過程基本相同。特別是,我真的看不出了解關係代數可以更輕鬆地編寫 SQL 查詢,反之亦然。這讓我想知道關係代數的教學是否只是某種歷史遺留問題,或者了解它是否真的有特定的好處。
所以我的問題是“了解關係代數是否有具體的實際好處,是否足夠重要以使其值得教授?”
作為數據庫管理員,您是否覺得關係代數對您的職業軌跡很重要?
一個子問題是花在學習關係代數上的時間是否可以通過適配更多的 SQL 來更有效地利用?
當 Codd 定義關係模型時,他定義了一組可以應用於關係的運算符。在指定關係代數時,就像指定整數代數一樣,我們能夠使用符號代替關係來解決查詢。這些運算符與整數代數運算符(+、-、*、/)具有相同的代數屬性。因此,我們可以假設某些規律總是適用於經歷該操作的關係,任何關係。例如,在整數代數中,我們知道加法和乘法是關聯的,因為我們可以改變操作數的分組而不改變結果:
a + ( b + c ) = ( a + b ) + c
類似地,在關係代數中,我們知道自然連接是結合的,因此知道 A 連接 B 連接 C 可以按任何順序執行。這些屬性和規律創造了重寫查詢公式的能力,並保證獲得相同的結果。數據庫專業人員的應用數學一書提供了有關各種重寫規則的重要細節,您可以使用這些規則以不同的方式精確地制定相同的查詢。在完美的世界中,任何產生相同結果的配方都將具有相同的性能。現代優化器雖然是一款了不起的軟體,但並不完美。因此,如果您以一種方式製定查詢並且性能很差,那麼您擁有以不同方式製定查詢的技能並且知道它具有相同的語義。另一個實際優勢是數據庫約束的規範。首先,了解關係代數使您能夠確定制定約束的最簡單方法。其次,通過在形式邏輯中製定約束,您可以立即澄清業務主題專家的任何歧義,他們用鬆散的英語制定業務規則並避免錯誤。
列奧納多·達·芬奇說:
愛實踐卻沒有理論的人,就像沒有船舵和指南針的水手上船,永遠不知道自己可以投向哪裡。
同樣,一個不了解關係理論基礎的數據從業者就無法像他們那樣完全掌握該技術。關於關係代數的一些很好的參考資料是 SIRA_PRISE 的關係代數介紹頁面和 CJ Date 的SQL 和關係理論。Date 的書展示了理解關係代數的實用性,以便您可以編寫更準確的 SQL 查詢。SQL 有許多怪癖和陷阱,並且對它的工作原理與原始關係代數運算符有一個很好的掌握,這確實有助於了解陷阱在哪裡並避免它們。