面向主題的資料庫技術的概念已經提出十幾年了,理念是先進的,但為什麼被實際應用很少?
我們看一個簡單的例子。某單位的工資系統是按工資單建資料庫的,職工張華的工資單編號是0104。該單位人事系統是按職工檔案建資料庫的,張華在人事系統中的編號是1122。人事系統要獲得張華的工資數據,需要做介面程序將1122轉換成0104,才能正確地檢索;反之,工資系統要獲得人事系統的數據,需要做介面程序將0104轉換成1122。這樣,2個應用系統至少需要2個介面。如果再加上安監系統和社保系統,共4個應用系統要互相交流數據,就至少需要12個介面。而企業經營管理中如果有20個大大小小「孤島式」的應用系統需要相互交流數據,就至少需要380個介面。這麼多的介面無法做完,即使做完所有的介面,整個系統的運行也將是低效率和脆弱的。所以,企圖通過做介面實現系統集成,從來就是可望而不可及的。
解決這類應用系統集成問題的正確方法是:不按照單證報表原樣建立資料庫,而是面向業務主題建立資料庫,這就是主題資料庫。上例中的員工信息是幾個應用系統所共用的,應該對企業的所有員工統一編號,有關員工的信息統一組織存儲,從而能保證信息共享——各應用程序都存取共享的「員工主題資料庫」,這就從根本上取消了不必要的介面。這就是說,通過建立主題資料庫,簡單、科學地實現了應用系統的集成。
謝邀。
怎麼說呢,問題本身的描述來看,這個ERP設計是有一些問題,但是這些問題里,有些其實不算問題,有些是不會發生的問題。
第一,多個孤島系統的相互檢索問題。
既然都是孤島,所以從業務邏輯上來說,直接參照的業務是非常少的。如果有類似數據,可以通過資料庫映射來解決問題,如果是大量的數據,可以建立物理視圖或者每晚用批處理做數據交換。數張表重複定義的開銷對於企業級資料庫是可以接受的。
第二,ID管理混亂。
一般來說,類似員工ID這種東西,肯定是不會變的。而且做的時候一般有先後,人事系統率先做出來,然後之後的系統只要參考著開發就可以了,一般沒有誰會傻呵呵地重新定義一套ID管理系統,做了也是給人罵。
但是工資單ID和員工ID不一樣這個問題是另外一回事了。可能工資系統的開發,ID的欄位定義和員工的ID欄位定義不同(備註1),包含的內容不一樣,所以要重新開發一套。比如說,人事ID是010001。其中前兩位是部門ID,後四位是該部門內部員工序號。而工資ID則是0607001。0607表示年月,而0001表示當月第幾個創建的工資ID。這個也完全沒有問題。核心業務表使用的時候,兩個ID同時定義就可以解決了。
第三,業務的實際開發問題。
一整套系統是一家公司開發的話還好,如果是多家公司開發,或者說多套系統是多個公司開發,那麼必然存在數據交互上定義的不統一。這個是很正常的事情。相比較小型軟體的核心問題是開發了賣不出去,erp的最核心問題就是不能準時交貨。而最容易被拖後腿的,除了客戶改邏輯,就是被其他公司的代碼影響。比如開發框架和共通模塊的組為什麼最重要?因為所有的業務邏輯部門都要用到他們的東西,他們的東西不能用了或者有問題,那麼所有的開發都要嚴重受到影響。那麼類似這種業務數據上的問題,大家最喜歡的就是自己定義一套。如果有別人定義的,那麼最好是別人已經確定的東西直接拿過來,三天兩頭就改的規則,還不如自己先定義一套,核心邏輯全部開發完,最後再做一個介面搞定一切。
第四,介面的開發和效率問題。
數據轉換的開發,其實不存在太多問題。伺服器的性能現在非常強大,一般來說類似題目這種額外開銷,對伺服器沒有任何影響。單單開發上來說,數據的轉換業務開發是很簡單的事情。唯一不好的地方其實在於業務邏輯的複雜度。不過這個問題也很容易解決。隔離法。盡量不去用其他系統的數據,或者其他系統開放一個共通方法,內部怎麼做我不要知道,我只要知道我給你a,你能給我b就可以了。
其實我不是很清楚題主問的 面向業務主題建立資料庫 是指的什麼,正常開發都是根據業務來建立資料庫的,和問題的本身也沒有太大關係。你覺得你栗子里的問題沒有解決,是你用的系統太爛,或者你見識太少。
個人觀點企業里做信息化並不專業,往往是為了信息化而信息化,系統開發只尊重業務邏輯,卻不管企業大環境中的數據邏輯(數據的語義標準化),只要系統只要滿足單個業務需求即可,這樣業主既能使用,開發人員也能拿到錢,集成的話也是將業務梳理下放進一個系統內,系統間靠介面根本玩不轉(根本原因企業應用要求計算機適應人,而不是人適應計算機)。最近也有感這問題,並開始關注面向數據的體系結構(DOA),但苦於沒有具體的方法論https://www.zhihu.com/question/66925713
完全沒聽過什麼是主題資料庫。
另外你舉這個例子就是個很普通很普通的問題啊。解決方案怎麼就叫沒被實際應用了?
員工信息屬於基礎數據,肯定有個單獨的系統維護,然後分發給所有需要使用的系統,怎麼可能連統一編碼這種事都不做。大型企業里最少都有上百個系統,按你說的每個系統自己編碼做介面轉換,玩得轉嗎。推薦閱讀: