這兩者有什麼差別,各該用在什麼場景中
這兩者有什麼差別,各該用在什麼場景中
我們所有操作都是走的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適合業務邏輯比較複雜的項目。