[MySQL] Effective SQL 筆記
https://hackmd.io/GsfjtXfcTh64DMlRmvvrZg?both Effective SQL 資料庫模型設計 確定所有資料表都有主鍵 Customer Column 2 Column 3 John A. Smith Text Text Smith, John A. -------- -------- John Smith -------- -------- John A Smith -------- -------- Smith, John -------- -------- 上表中不一致的資料,雖然對電腦來說每筆都是獨特的,但其實可能是重複的, 而這種重複沒有程式來判斷行不通,就算將Customer訂為主鍵,符合了唯一需求,仍不是個好的主鍵。 主鍵特性: 儲存獨特值 不能為空 穩定(不會改變) 盡可能簡單(整數型態、非浮點數、字元,單一欄位而非多欄位) 常見手段,使用自動產生的無意義值作為主鍵,名稱由RMDBS軟體所訂, 例如IBM DB2、MSSQL、 Oracel 12c 的 IDENTITY,MS Access 的 AutoNumber、 MySQL 的 AUTO_INCREMENT,PostgreSQL 的 serial。 (搭配 redis 產生 sequence) 資料參考完整性(Referential Integrity) RI 在 RMDBS 中是一個非常重要的觀念。 強制 RI 表示具有非空的外來鍵的子資料表中的每個列必須在父資料表中有相對應的紀錄。 消除重複儲存資料 減少不一致資料與處理資雲 消除重複群組 欄代價高,列代價低 每個欄位只存一個屬性 通常不會儲存計算出的資料 定義FK保護參考完整性 確保資料表關係的合理 不是任何關聯都應該被建立 3NF以上正規化 對資訊倉儲使用反正規化 大量讀取少量寫入時,帶有全部所需資料的表索引應用更有效率,可以加快速度。