物件導向建模與資料表建模兩種分析設計方法的比較的思考
不好意思,我又來發布一點不同的聲音了
1、為進一步說明OO和關聯式資料庫是屬於兩個不同世界觀,存在天然矛盾,就象有神論和無神論。
------------------------------------------
從本質上兩者是和諧同一的,為什麼這樣說,因為你所有物件的屬性最終分解的結果不會超過計算機固有資料型別,即int,char,byte,double,float等這些基本資料(現在string也算基本資料結構吧)db完整的實現了這些資料結構。而且OO與DB很多地方相似,比如物件的完整性(一個物件必定要有固定的屬性,且要保持資料完整,DB的需要有固定列,而且強調資料完整性),物件的可擴充套件性(物件的繼承,子類比父類多屬性,DB是新的表)。
2、物件和關聯式資料庫累贅轉換
------------------------------
這一點我承認,確實是存在一定的麻煩。但是我又仔細想了一下,好像有那裡不對。那裡不對那??就是物件的序列化問題。網路傳輸,物件儲存,都會要序列化,當然現在說最符合思維而又讓人能夠很容易看懂的最好方法是XML。如果使用COBRA,EJB也許可以不用關心網路傳輸的序列化問題,但是儲存的序列化還是要考慮的。xml最大的優點就是最大的缺點,自我描述的冗餘性。且效率上存在很大的問題,而且需要自己來保證資料的完整性,依然很麻煩。
怎樣解決:
public class Course {
public string name;
public int courseID;
int deptID;
public int creditHours;
}
這樣的一個物件對應一個錶行的可以使用反射,增加一個屬性對應資料庫增加列,可以要求名稱具有特定規則即可(Java的規範便是這樣的約束)。
關於人與學生的那個,應該使用多張表來解決。而且現在也是這樣解決的。國內某家銀行,其對公對私客戶是放在一張表中(統稱客戶表),根據對公對私的不同特性會有不同的特性表。從資料庫方向考慮也不推薦放在一個表裡面,會嚴重影響效率。
關於教授與部門的,是採用對映表的方式,代表部門的是部門ID,代表教授的是教授ID(OO也是這樣的,怎樣找到一個物件??通常我們會透過ID來尋找)
Hibernate只能解決簡單系統的問題,不能解決所有問題,當系統複雜,OR對映時需要自己寫程式碼(OO的序列化也得自己寫,乾脆序列化到DB),而且是否一次性提交那麼多資料,在於你可以適當考慮充血模型(setter裡面只對修改屬性進行記錄,提交時只修改變動屬性相關表)。
綜上所述:DB與OO並不是天生的對頭,而在於你怎樣去看待這兩個工具。
-------------------------------------------
是在是原來的討論貼不讓我回復了,只能新發了,純討論,勿刪貼
1、為進一步說明OO和關聯式資料庫是屬於兩個不同世界觀,存在天然矛盾,就象有神論和無神論。
------------------------------------------
從本質上兩者是和諧同一的,為什麼這樣說,因為你所有物件的屬性最終分解的結果不會超過計算機固有資料型別,即int,char,byte,double,float等這些基本資料(現在string也算基本資料結構吧)db完整的實現了這些資料結構。而且OO與DB很多地方相似,比如物件的完整性(一個物件必定要有固定的屬性,且要保持資料完整,DB的需要有固定列,而且強調資料完整性),物件的可擴充套件性(物件的繼承,子類比父類多屬性,DB是新的表)。
2、物件和關聯式資料庫累贅轉換
------------------------------
這一點我承認,確實是存在一定的麻煩。但是我又仔細想了一下,好像有那裡不對。那裡不對那??就是物件的序列化問題。網路傳輸,物件儲存,都會要序列化,當然現在說最符合思維而又讓人能夠很容易看懂的最好方法是XML。如果使用COBRA,EJB也許可以不用關心網路傳輸的序列化問題,但是儲存的序列化還是要考慮的。xml最大的優點就是最大的缺點,自我描述的冗餘性。且效率上存在很大的問題,而且需要自己來保證資料的完整性,依然很麻煩。
怎樣解決:
public class Course {
public string name;
public int courseID;
int deptID;
public int creditHours;
}
這樣的一個物件對應一個錶行的可以使用反射,增加一個屬性對應資料庫增加列,可以要求名稱具有特定規則即可(Java的規範便是這樣的約束)。
關於人與學生的那個,應該使用多張表來解決。而且現在也是這樣解決的。國內某家銀行,其對公對私客戶是放在一張表中(統稱客戶表),根據對公對私的不同特性會有不同的特性表。從資料庫方向考慮也不推薦放在一個表裡面,會嚴重影響效率。
關於教授與部門的,是採用對映表的方式,代表部門的是部門ID,代表教授的是教授ID(OO也是這樣的,怎樣找到一個物件??通常我們會透過ID來尋找)
Hibernate只能解決簡單系統的問題,不能解決所有問題,當系統複雜,OR對映時需要自己寫程式碼(OO的序列化也得自己寫,乾脆序列化到DB),而且是否一次性提交那麼多資料,在於你可以適當考慮充血模型(setter裡面只對修改屬性進行記錄,提交時只修改變動屬性相關表)。
綜上所述:DB與OO並不是天生的對頭,而在於你怎樣去看待這兩個工具。
-------------------------------------------
是在是原來的討論貼不讓我回復了,只能新發了,純討論,勿刪貼
相關文章
- 物件導向建模分析(一)物件
- 77種資料建模工具比較
- 物件導向與領域建模物件
- 物件導向及建模物件
- 物件導向與函式程式設計的比較物件函式程式設計
- Django 構建模板form表單的兩種方法DjangoORM
- 物件導向建模 = 面向賓語建模 != 主語思維物件
- UML建模工具比較
- 資料分析與挖掘-挖掘建模
- 物件導向分析與設計(OOAD)物件
- 資料建模與框架設計的暫時總結框架
- Rose與PowerDesigner:兩款建模工具的對比ROS
- oracle資料庫的建模設計案例Oracle資料庫
- 物件導向程式設計的一些思考物件程式設計
- PHP物件導向程式設計中獲取物件屬性的3種方法例項分析PHP物件程式設計
- MySQL大量資料插入各種方法效能分析與比較MySql
- 動態企業建模DEM與ERP的比較(轉)
- 關於物件導向程式設計的一點思考物件程式設計
- iOS 開發之 OOA (物件導向分析) & OOD (物件導向設計)& OOP (物件導向程式設計)iOS物件OOP程式設計
- 比較兩個表的資料差別
- COPA 獲利分析的兩種方式比較
- .NET應用架構設計—物件導向分析與設計四色原型模式(彩色建模、領域無關模型)(概念版)應用架構物件原型模式模型
- 說說資料分析中的資料建模
- 元學習:人類與大模型比較建模大模型
- 四種在Javascript比較物件的方法JavaScript物件
- 物件導向設計與DROOLS物件
- oracle資料庫兩表資料比較Oracle資料庫
- 物件導向的7大原則與23種設計模式物件設計模式
- 【資料倉儲】|4 維度建模之事實表設計
- python清空字典的兩種方法比較Python
- 全網最適合入門的物件導向程式設計教程:00 物件導向設計方法導論物件程式設計
- 物件導向與資料庫物件資料庫
- 七種常見的物件導向設計原則物件
- 物件導向的關聯式資料庫設計(轉)物件資料庫
- 業務資料分析和建模薦
- 【資料倉儲】|3 維度建模之維度表設計
- 資料庫建模或表結構(模型設計)_隨記(二)資料庫模型
- 資料倉儲建模方法論