為什麼說「 一個DBA是否有足夠的設計能力,就看他有多大的能力做反範式設計就可以了,不要問為什麼」?

1. 大輝的意思是不是,「按範式設計屬於正常技能,在具體情景下做出合適的反範式設計才是真正設計技能熟練的體現。」

2. 大輝認識那些對此話「頂」的人么?

3. 莫名其妙就"頂"的人是不是白痴?

4. 大輝為什麼要在最後加上「不要問為什麼」,心情不好么?


資料庫設計應該也是分為三個境界的:

第一個境界,剛入門資料庫設計,範式的重要性還未深刻理解。這時候出現的反範式設計,一般會出問題。

第二個境界,隨著遇到問題解決問題,漸漸了解到範式的真正好處,從而能快速設計出低冗餘、高效率的資料庫。

第三個境界,再經過N年的鍛煉,是一定會發覺範式的局限性的。此時再去打破範式,設計更合理的反範式部分。

範式就像武俠裡面的招數,初學者妄想不按招數來,只能死的很難堪。畢竟招數都是高手總結歸納的精華。而隨著武功提高,招數熟練之後,必然是發現招數的局限性,要麼忘掉招數,要麼自創招數。

只要努力,加上多熬幾年,總能達到第二個境界,總會覺得範式是經典。此時能不過分依賴範式,快速突破範式局限性的人,自然是高手。


Normalization 就像劍法的招式,不熟悉的情況下要一招一式好好學。De-normalization 則是在諳熟套路的基礎上自創新招,前提是得清楚得知道自己在幹什麼、為什麼要這麼干。De-normalization 通常是為了解決性能或是擴展性的問題,要求對資料庫底層實現有清楚的了解。死腦筋的認為 normalization 才是唯一真理的人顯然是 DBA 還未完全入門。


個人講解,僅供參考:

  1. 無論是按照範式設計還是反範式設計,我覺得這個並不是設計能力的體現。有很多現成的反範式方案可以參考,反範式是能力,但不一定是DBA根本的能力吧?!
  2. 我認為好的DBA能夠根據情況設計資料庫,並且隨時能夠應變去面對新的情況,簡單點說就是會「因地制宜」地去設計,無論是按範式還是反範式。
  3. 我覺得NoSQL的流行影響了很多人的判斷,多數時候(尤其是創業初期)根本不必要考慮什麼範式不範式,老實按照自己的需要把資料庫的結構先設計出來。對於MySQL,需要反範式設計時,估計你的用戶數量已經可以讓你拿到VC啦,這個時候,想怎麼改不行啊?!
  4. 說句大輝不愛聽的說話:雖然貴為淘寶前DBA,不過,我終究相信,大牛有大牛的事情,小菜有小菜的觀點,他的話可以聽,但不要作為權威一樣相信,適合自己的才是最好的!樓主沒有必要可以刻意大輝的意思,如果實在想八卦,那就問他本人好了。呵呵

希望對你有用.....


聽過一種說法:對規範、標準的持續深入,目的是為了能更好地利用及打破規範和標準。

我相信所有領域的牛人們都有這個趨勢。

P.S. Google搜索主頁的HTML代碼,看過的前端開發們估計都會倒抽一口涼氣:裡面曾經尼瑪就連個body標籤都沒有!而Google恰是WEB規範的主要推進者之一。私以為,這中間是沒有矛盾的。規矩是死的,人是活的。


我想說的是,範式設計是理論上的東西,過於教條,反範式設計無處不在,不屬於高級技能。資料庫設計的優劣,從範式這個角度進行考量是比較基礎的。


調侃一下:說了不要問為什麼,你還是來問了。


有破有立,破立隨心所欲,應時應景,恰到好處,才是真正了解規則的人


反範式是數據倉庫精髓,怎麼跟DBA這樣扯在一起?哪跟哪兒啊。。


DBA是面向資料庫的設計,是面向數據應用的需求和硬體能力的矛盾問題的設計能力。DBA的輸入是找出哪些數據經常會被訪問,哪些數據偶爾會被訪問,讀的速度有多快,寫的速度有多快,有哪些可以做成實時處理的,哪些可以做成中間變數,還有哪些可以進行批處理。

範式又不能當飯吃。


推薦閱讀:

關於mysql的幾個問題,公司中實際遇到的,請大神給看一下,大家討論一下?
如何理解資料庫事務中的一致性的概念?
如何設計一個資料庫,能夠存下如此「大量」的數據?

TAG:資料庫 | 資料庫管理員DBA | 程序 |