"Orm"
- 8.2 運算發生的位置:資料庫端與記憶體端的工具、分工條件與 DuckDB
運算留在資料庫端或搬進記憶體端這條分界,怎麼決定工具的形狀、容量上限與失敗形態
- 8.3 ORM 與 DataFrame 的分辨:回傳值的形狀、連線物件與查詢送出的時機
ORM 產生查詢、DataFrame 執行運算,以及外觀相似的方法串接底下差了什麼
- 10.5 GORM:model、關聯載入與 ORM 送出的 SQL
GORM 的 model 與命名慣例、開著 SQL 記錄寫程式的方式、First 與 Take 的差別與重用變數時多出的條件、找不到資料的判斷、N+1 與 Preload、零值更新被略過、寫入時的預設交易、唯一約束錯誤的判讀,以及 AutoMigrate 在正式環境的限制
- 10.6 GORM 的 gorm.Model、軟刪除與 Save:慣例欄位加上的查詢條件與整列寫回
gorm.Model 帶進來的 ID、CreatedAt、UpdatedAt、DeletedAt 與 UpdatedAt 的更新時機、DeletedAt 讓刪除變成 UPDATE 並替每個查詢加上條件、不經過那個條件的路徑(Raw、其他服務)、軟刪除與關聯載入、外鍵、唯一約束的衝突與部分索引、無條件刪除的保護,以及 Save 寫回全部欄位、找不到主鍵時改成 upsert 而把已刪除的列寫回或恢復
- 1.17 應用程式存取資料庫的工具分層:驅動、結果對映、從 SQL 產生程式碼、Query Builder 與 ORM
應用程式存取關聯式資料庫的工作(寫 SQL、取得連線與交易、把結果對映成程式的值),驅動、結果對映、從 SQL 產生程式碼、Query Builder 與 ORM 各接手哪幾件、接手之後哪些行為看不見,ORM 的 N+1 與交易邊界、Go、gunicorn 與 PHP-FPM 各自對資料庫的連線總數與 max_connections、唯一約束違反時各語言讀取約束名稱的位置、讀寫分離時各框架把查詢送到主庫或副本的規則、資料拆到多個資料庫時跨不過的邊界,以及 Go、PHP(Laravel)與 Python 的對應工具與選型軸
- ORM(Object-Relational Mapping)
看到程式用類別與方法描述查詢時,查它交出去的是什麼、以及哪些行為在程式碼上讀不出來
- Soft Delete(軟刪除)
資料表有 deleted_at 欄位、ORM 的刪除改成 UPDATE,或刪掉的資料再建一次卻撞唯一約束、報表數字和頁面對不上時,查軟刪除的過濾條件由誰加、哪些路徑沒有加
- Query Log(SQL 語句記錄)
要確認 ORM 或資料存取函式庫實際送出了哪些 SQL、交易的 begin 與 commit 有沒有送出,或在正式環境追查慢查詢與某一筆資料被誰改過時,查應用程式端與資料庫端的語句記錄各記了什麼