《為什么支持PostgreSQL而不是MariaDB/MySQL》要點:
本文介紹了為什么支持PostgreSQL而不是MariaDB/MySQL,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:PostgreSQL教程
【譯者注】作者將PostgreSQL與MariaDB和MySQL進行對比,在數(shù)據(jù)類型處理,數(shù)據(jù)結(jié)構(gòu)和NULL處理三方面體現(xiàn)出PostgreSQL的優(yōu)勢,同時贊助開發(fā)者更好地選擇適合自己的數(shù)據(jù)庫.
以下為譯文:
多年來,MySQL和PostgreSQL是相互競爭的數(shù)據(jù)庫,但這些數(shù)據(jù)庫是針對不同的用戶.在我看來PostgreSQL服務于專業(yè)用戶,而MySQL在Web開發(fā)人員中很受歡迎.但是,在Oracle接手MySQL之后,我覺得MySQL的明星色彩已經(jīng)有點褪色了.
自從MariaDB推出以來,我個人覺得這項技術(shù)還沒有真正完成,但用戶依舊會使用MySQL/MariaDB,并且很有興趣地將PostgreSQL與這些技術(shù)進行比較.許多人對“PostgreSQL is just better”(PostgreSQL更勝一籌)這樣的話表示不同意.這樣的爭論往往是不明智的,但PostgreSQL社區(qū)確實能夠做得更好.所以應該提出一些想法,為什么使用PostgreSQL比MySQL/MariaDB更合適.
這篇文章的目的是列舉一些例子,來說明在技術(shù)層面上為什么你可能更應該使用PostgreSQL.但要注意:這個帖子只是說明一些“最好的”特點,并不是一個完整的列表,然而,這些應該足以讓人們做出決策.
PostgreSQL與MySQL / MariaDB:數(shù)據(jù)類型處理
在這里看到的是PostgreSQL錯誤,因為試圖放入表中的數(shù)據(jù)并不符合列的數(shù)據(jù)類型,而MySQL / MariaDB則會悄悄地更改你的數(shù)據(jù).是的,MySQL/MariaDB確實發(fā)出了警告,但過了一段時間后,表中的數(shù)據(jù)就不是最初的數(shù)據(jù)了.
為什么這很重要?假設你中了一百萬的彩票,但你最終只得到9999.99,只因為數(shù)據(jù)變化極少,所以不幸的是根本沒有人注意到.你會生氣嗎?我會的.在這個例子中,PostgreSQL所顯示的操作是正確的,原因有很多:
最可能的原因是定義了列的方式.
警告不等同于錯誤.
存儲數(shù)據(jù)不是 “容忍”——它更關(guān)注正確性.
如果你對著本身開槍,那也就沒有必要去警告你,因為“你現(xiàn)在可能已經(jīng)死了”——所以最好是在一開始就阻止這種事情的發(fā)生.
經(jīng)驗總結(jié):PostgreSQL非常重視數(shù)據(jù)結(jié)構(gòu).
PostgreSQL vs MySQL / MariaDB:謹慎對待現(xiàn)有數(shù)據(jù)
再強調(diào)一遍,MySQL / MariaDB是會更改你的數(shù)據(jù)的.請注意,插入到表中的原始值為1234.5678,但現(xiàn)在得到9.99.所以以后你會開始關(guān)注細微的差別了嗎?如果這是你的銀行賬戶?你會在乎嗎?如果這個數(shù)據(jù)庫只是為了保持運行而不辦理問題——那么你還會繼續(xù)相信它嗎,也許是時候需要找到一個替代品了.如果你的生活依賴于數(shù)據(jù),你會接受一張數(shù)據(jù)表悄無聲音的改變嗎?也許我太保守了,所以我不會接受.
PostgreSQL達到了我個人對數(shù)據(jù)庫的期望.它會報出錯誤,并告訴我們數(shù)據(jù)是不能被更改的,因為數(shù)據(jù)是需要被掩護的.如果你想要更改表中的數(shù)據(jù)(以防新規(guī)則被違反),你必須明確地告訴PostgreSQL你想要什么:
在這種情況下,我們會告知PostgreSQL如何進行處理數(shù)據(jù).PostgreSQL并沒有很智能(也不像MySQL / MariaDB這樣的失敗),它不會去嘗試做一些有趣的事情——它只是做你想做的事情,以及做一些對你的數(shù)據(jù)有好處的事情.
PostgreSQL與MySQL / MariaDB:NULL處理很重要
你還記得“id”列上有一個非空約束嗎?MySQL / MariaDB并不關(guān)心這個,只是將值設為0.但是,0和NULL絕對不是一回事.NULL的意思是“未定義”或“我們不知道的值”.這其實很有道理:如果你不知道你口袋里有多少錢,那也不意味著你的口袋是空的.如果你不知道你喝了多少啤酒,這也并不意味著你的血液里有“零”酒精——你實際上可能剛剛從椅子上摔下來.
PostgreSQL仔細區(qū)分了0、空字符串和NULL.這些都是不一樣的,PostgreSQL總是會重視你的約束條件.
選擇數(shù)據(jù)庫
我在PostgreSQL和MySQL/MariaDB之間的選擇是毫無疑問的,對于我個人來說,MySQL不會是我的選擇.然而,這是一個自由的世界,人們可以本身做決定,希望你們能做出明智的決定.
維易PHP培訓學院每天發(fā)布《為什么支持PostgreSQL而不是MariaDB/MySQL》等實戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/9202.html