為什麼支持PostgreSQL而不是MariaDB/MySQL

MariaDB MySQL 數據結構 技術 IT技術之家 IT技術之家 2017-09-09

【譯者注】作者將PostgreSQL與MariaDB和MySQL進行對比,在數據類型處理,數據結構和NULL處理三方面體現出PostgreSQL的優勢,同時幫助開發者更好地選擇適合自己的數據庫。

以下為譯文:

為什麼支持PostgreSQL而不是MariaDB/MySQL

多年來,MySQL和PostgreSQL是相互競爭的數據庫,但這些數據庫是針對不同的用戶。在我看來PostgreSQL服務於專業用戶,而MySQL在Web開發人員中很受歡迎。但是,在Oracle接手MySQL之後,我覺得MySQL的明星色彩已經有點褪色了。

自從MariaDB推出以來,我個人覺得這項技術還沒有真正完成,但用戶依舊會使用MySQL/MariaDB,並且很有興趣地將PostgreSQL與這些技術進行比較。許多人對“PostgreSQL is just better”(PostgreSQL更勝一籌)這樣的話表示不同意。這樣的爭論往往是不明智的,但PostgreSQL社區確實能夠做得更好。所以應該提出一些想法,為什麼使用PostgreSQL比MySQL/MariaDB更合適。

這篇文章的目的是列舉一些例子,來說明在技術層面上為什麼你可能更應該使用PostgreSQL。但要注意:這個帖子只是說明一些“最好的”特點,並不是一個完整的列表,然而,這些應該足以讓人們做出決策。

PostgreSQL與MySQL / MariaDB:數據類型處理

為什麼支持PostgreSQL而不是MariaDB/MySQL

在這裡看到的是PostgreSQL錯誤,因為試圖放入表中的數據並不符合列的數據類型,而MySQL / MariaDB則會悄悄地更改你的數據。是的,MySQL/MariaDB確實發出了警告,但過了一段時間後,表中的數據就不是最初的數據了。

為什麼這很重要?假設你中了一百萬的彩票,但你最終只得到9999.99,只因為數據變化極少,所以不幸的是根本沒有人注意到。你會生氣嗎?我會的。在這個例子中,PostgreSQL所顯示的操作是正確的,原因有很多:

最可能的原因是定義了列的方式。

警告不等同於錯誤。

存儲數據不是 “容忍”——它更關注正確性。

如果你對著自己開槍,那也就沒有必要去警告你,因為“你現在可能已經死了”——所以最好是在一開始就阻止這種事情的發生。

經驗總結:PostgreSQL非常重視數據結構。

PostgreSQL vs MySQL / MariaDB:謹慎對待現有數據

為什麼支持PostgreSQL而不是MariaDB/MySQL

再強調一遍,MySQL / MariaDB是會更改你的數據的。請注意,插入到表中的原始值為1234.5678,但現在得到9.99。所以以後你會開始關注細微的差別了嗎?如果這是你的銀行賬戶?你會在乎嗎?如果這個數據庫只是為了保持運行而不解決問題——那麼你還會繼續相信它嗎,也許是時候需要找到一個替代品了。如果你的生活依賴於數據,你會接受一張數據表悄無聲音的改變嗎?也許我太保守了,所以我不會接受。

PostgreSQL達到了我個人對數據庫的期望。它會報出錯誤,並告訴我們數據是不能被更改的,因為數據是需要被保護的。如果你想要更改表中的數據(以防新規則被違反),你必須明確地告訴PostgreSQL你想要什麼:

為什麼支持PostgreSQL而不是MariaDB/MySQL

在這種情況下,我們會告知PostgreSQL如何進行處理數據。PostgreSQL並沒有很智能(也不像MySQL / MariaDB這樣的失敗),它不會去嘗試做一些有趣的事情——它只是做你想做的事情,以及做一些對你的數據有好處的事情。

PostgreSQL與MySQL / MariaDB:NULL處理很重要

為什麼支持PostgreSQL而不是MariaDB/MySQL

你還記得“id”列上有一個非空約束嗎?MySQL / MariaDB並不關心這個,只是將值設為0。但是,0和NULL絕對不是一回事。NULL的意思是“未定義”或“我們不知道的值”。這其實很有道理:如果你不知道你口袋裡有多少錢,那也不意味著你的口袋是空的。如果你不知道你喝了多少啤酒,這也並不意味著你的血液裡有“零”酒精——你實際上可能剛剛從椅子上摔下來。

PostgreSQL仔細區分了0、空字符串和NULL。這些都是不一樣的,PostgreSQL總是會重視你的約束條件。

選擇數據庫

我在PostgreSQL和MySQL/MariaDB之間的選擇是毫無疑問的,對於我個人來說,MySQL不會是我的選擇。然而,這是一個自由的世界,人們可以自己做決定,希望你們能做出明智的決定。

相關推薦

推薦中...