靈活運用數據庫主外鍵
在最近的工作中發現,公司現有表都是沒有主外鍵關系的,也就是沒有加數據庫主外鍵約束,全部都是采用程序來控制數據的一致性。這點讓我很是不解,從當初學習數據庫,到參加工作使用數據庫和設計數據庫,一直都遵循數據庫的三范式,表之間的關聯采用數據庫的主外鍵約束(請理解這是數據庫的約束,而不是我們程序控制的約束)。于是查找了一些資料,現在的疑惑才慢慢解開。下面我將對數據庫的作用,以及為什么出現應用程序,再到真正開發時如何設計數據庫的一些理解和大家分享下,歡迎提出不同的見解。
數據庫是什么
數據庫,是計算機中運行的一個進程,它可以完成數據存儲,查找,分析,數據挖掘等我們通常使用的功能(大家可以聯想access數據庫),只是其操作起來對人員的要求較高,必須要懂得sql語句的寫法,深刻理解表之間的關系,當然也可以請專門的人員來幫忙將數據導出來,這樣的工作實施起來麻煩還是比較大的。并不是每個人都懂sql語法,專門的人員(DBA)一般公司請不起,簡單的操作人員,工作效率是個問題。數據庫的功能是強大,但是面向的人群較為苛刻。所以在我的思維習慣中,數據庫往往是一種后臺的服務(不直接操作它,但是使用其提供的服務,sql語句就是它提供的接口),不過現在不能再這么認為了,我們可以僅僅利用數據庫各種數據的操作,比如數據的錄入,數據的分析等,但是這樣的效率太低了,如果每天有上千條的數據(這里說少點)需要保持,那么單純來使用數據庫這將是一項浩大的工程,分析也一樣,而且分析得出的數據用戶不一定能看懂。于是有了我們的應用程序。
數據庫之上的應用系統
如果單從數據庫應用程序的角度來考慮,而不談其它應用系統,其作用可以為我們提供一個透明的簡單的數據錄入,查詢和分析。用戶只需要點擊某一個按鈕就可以得到想要的結果。而且其面向的人群更大眾化,正是有這樣的特性,才使計算機真正的為更多人服務,用戶完全可以認為不存在數據庫,無論是網上購物,還是自己的數據備忘,抑或是分析最近關注信息的走勢,都是一個按鈕解決問題。再回到技術上,系統要想做到方便用戶使用,到底應該怎么做?
需要知道的兩個概念
OLAP和OLTP。一個是聯機分析處理,一個是聯機事務處理。聯機分析強調的是數據查詢和整合分析,數據修改較少,而聯機事務則強調數據修改較多,對數據一致性要求較高。這就對應著兩個系統,一個系統對查詢的性能要求很高,方便數據的可移植,一個系統對數據完整性和一致性要求較高。因此我們在做系統設計時必須搞清楚系統的特性,如果是查詢性能高而且數據結構的修改較多,數據移植頻繁,那么在數據庫的設計時就不能完全遵循三范式,因為這樣數據庫會有一定的自檢策略而且比較豪性能,相反則更能很好的保證數據的正確性。
結論
知識還是要靈活運用的,范式在數據庫中是真理,但是當和其它系統集成的時候就不一定完全合理,比如數據的冗余,如果經常做統計查詢,那么將統計結果放到一張表中比關聯幾張表來查詢快多了,而且用戶看中的就是這個,其它讓我們大膽相信自己的程序能夠控制后,做好數據準確的把門將軍。讓數據庫的最后一道關用在其它地方吧。