###### tags: `database` # Data model - Database: 一坨資料 - DBMS: DB 的管理系統,是管理某坨資料的「軟體」(DS + Algo) - 資料形式 - 客戶端 [stateful]: Json (Tree structure) - Web server [stateless]: 傳遞/調整 Json ↔ Table - DB server [stateful]: Table structure - Data Model: 單筆資料的資料結構 - ER Model: 有 ID 的物件導向化資料 - Entity: 有成員的實例 (instance),也就是 table row - Entity Group: 有 unique ID 成員的物件 (class) - Relationship: 不同物件間依據關係,以參考/指標相連 - 故兩群物件有不同的映射關係 - 一對一,一對多,多對一,多對多 - Relational Model: 一種實作 ER Model 的作法 - Relation == Table - 消除管理多對多的複雜性,以一對多的表格為典範 - Primary Key 為 ID - Foreign Key 為不同物件間的參考 - Schema: 資料庫的資料結構 - 在 Relational Model 中就是表格欄位的集合 - 比如… 假設校務資訊系統中學生的 Schema 為: ![](https://i.imgur.com/MOFfFG7.png) 那在 Relational Model 中,資料會這樣擺,也就是 Relation 長這樣: ![](https://i.imgur.com/Bo2Ktzm.png) - 資料庫正規化 - 將大表格拆分成更緊緻的數個小表格 - 簡化資料的管理負擔,提升速度與空間的使用 - 常見的資料庫會實作到 3rd normal form 或其變體 BCNF normal form [Functional Dependency & Normal Form](https://www.notion.so/Functional-Dependency-Normal-Form-ee725799daaf40d2b451accb3522ea0a) ## 將 Tree 轉為 Relational Model - 假設有一 JSON,如縮圖 ![](https://i.imgur.com/KJkqvuz.png) - 我們把 user 跟 post 以物件的形式儲存,定義 user 和 post schema ![](https://i.imgur.com/HSkmT8q.png) - 似乎遺漏了人與人間的關係,也少了 user 和 post 的聯繫,不仿也用 table 的方式記錄下來 ![](https://i.imgur.com/dSdxl2V.png) 大功告成 OwO