這兩者有什麼區別,各該用在什麼情境中
回複內容:
這兩者有什麼區別,各該用在什麼情境中
我們所有操作都是走的orm,因為操作簡單 直觀明了 好維護,效能是低一些 但還沒有多致命,真有並發需要最佳化了 用DB也不一定能解決問題。還是要瞭解orm每個方法的意思,不然你可能一不小心就會多出來很多很多sql,比如取列表的時候加個with不要僅僅靠關係來擷取聯表的其他內容。
沒用過laravel,但估計理解應該一樣,DB是直接寫SQL操作資料庫,ORM是利用對象操作資料庫。
用SQL還是用ORM都能操作資料庫,SQL是關係型資料庫的查詢語言,而關係型資料庫是大主流,對SQL的理解和使用是必須的。但程式開發目前更傾向於OOP思想,因為它有更人性化的表達力,而SQL表達力上不如OOP。表達能力越好的語言,更利於人類整理組織代碼邏輯,更具表達能力的語言在整個開發效率上有質的最佳化,代碼也會更穩健,可能出現的BUG會更少。
大段的SQL要進行調試不會比ORM進行調試要容易,並且ORM一般能切換不同資料庫,這些就是ORM的優勢。穩健的系統更應該使用ORM,這能有效避免失誤引起的低級錯誤。但ORM的代碼並不統一,你在laravel熟悉了它的ORM,不能直接用於其它framework。
如果你入行不長,屬於新手,那儘可能多用SQL,因為SQL不可避免要用到,深度瞭解SQL是必須的,多用可以當作是練習。如果你覺得自己已經經驗豐富了,那就用ORM,這樣可以降低失誤率。
建議用DB門面直接操作資料庫,因為ORM效能低。
資料查詢上面,ORM不會比DB差的,就比如with,是用了sql最基本的拆語句最佳化。ORM的損耗僅僅是代碼層面的,這已經不算是問題了。
ORM適用於一般到中等複雜度的查詢,也適用於各種模型操作,比如有一個關係targets,你可以直接用targets()->delete()等等進行關係資料操作。
ORM中的虛刪除,自動更新時間欄位,欄位保護,欄位類型轉換,都會在一些規範而且系統的工程中讓你受益。
另外DB的情境:一些比較複雜的查詢語句,事務操作,等都需要DB來完成。
DB主要是一個查詢構造器(SQLBuilder),它會幫你把輸入的參數轉變成SQL語句去資料庫裡查詢,和你自己手動寫SQL語句本質上是一樣的。
ORM是一個對象關係映射(Object Relational Mapper)工具,它會把資料庫中的資料對應成對象和集合對象,你無需接觸底層資料,可以直接調用映射出來的對象進行開發。
DB適合用於對效能要求高或者商務邏輯簡單的項目,ORM適合商務邏輯比較複雜的項目。