學習紀錄前言
其實原先是因為工作上有碰到要去了解一下 mariaDB, 但因為完全不熟悉就從 relational DB 開始看起, 結果輾轉看到了 ERD 這個東西... 想說那就留個紀錄好了, 於是就跑來 it 邦幫忙開了個新帳號, 開始寫記錄了, 總之, 很希望有一些夥伴能一起學習, 如果針對內容有誤的地方, 也歡迎討論
參考資料
甚麼是 ERD
ERD ( Entity Relationship diagram ) 常用於設計 relational DB 的資料,透過 ERD 可以看出兩個 entities 之間的關係
ERD 跟 data structure diagrams (DSDs) 息息相關, DSDs 關注於資料內本身的關聯, 而 ERD 則常用於表達資料流 (data flow diagrams (DFDs)),也就是系統對資料的操作
ERD 的用途
- Database Design: 這應該是最主要的用途之一,ERD 可以協助 Dev 清楚繪製出資料流,以及資料間的關係
- Database troubleshooting: 透過繪製 ERD,去找出既有設計上的問題或是可以改善的地方
- Business information systems: 加入商業邏輯後,ERD 可以明確的表現出系統上的程序動作
- Business process re-engineering (BPR): ERD 可以協助去重構資料結構和設計新的 model
- Education/Research: 教育/研究會用到許多資料,ERD 可以協助這塊 (我個人是覺得這兩個用途是來混分的啦...)
ERD 內的 components 和 features
主要有四個部分: Entity, Relationship, Attribute, Cardinality
-
- Entity: 可以想成是一個名詞,用來去定義某個物件,譬如: 一個學生、一組顧客或幾輛車等等,通常會用長方形來表示
-
Entity type: 代表這個 Entity 的類別,Entity 本身是獨立一筆資料,會有多個 Entities 為某個 Entity type
-
Entity set: 代表多個 Entity 的組合,如果 Entity 本身代表一個人,Entity set 可以說代表了一段時間內在公園裡的人
-
Entity categories: Entity 可以被定義為不同的 category, 譬如: Strong entity, Weak entity, Associative Entity等等
- Strong entity: 可以獨立作為一個 Entity (有自己的唯一主鍵)
- Weak entity: 不能獨立作為一個 Entity (依賴其他 Entity 的主鍵加上部分鍵(partical key))
- associative entity: 透過其他主鍵組成的 Entity
![https://ithelp.ithome.com.tw/upload/images/20240831/20168969A9cGoMOm1k.png](https://ithelp.ithome.com.tw/upload/images/20240831/20168969A9cGoMOm1k.png)
-
Entity key: 這代表了 Entity 中的 key
- Primary key(主鍵): 這個 Entity 的唯一識別碼,透過這個 key 可以找到唯一一個 Entity
- Candidate Key(候選鍵): 同樣也是唯一識別碼,所以也可以透過這個 key 找到唯一一個 Entity,可以做為主鍵的所有 key 都是 Candidate key
- Alternate Key(替代鍵): 不是 primary key 的 candidate key
- Foreign key(外鍵): 指在其他 Entity 引用另一個 Entity 的 primary key,用來建立兩者之間的連結
- Super Key(超鍵): 指可以透過這個 key 組合來找到 Entity, primary key 是最小的超鍵
-
- Relationship: 關係是 ERD 的核心概念之一,這描述/代表了一對一、一對多、多對多等等之間的行為,可以把關係視作為動詞,這或許對理解它有一些幫助
- Relationship 實體通常在 ERD 用菱形來表示,稱作 Relationship instance
-
- Attribute: Entity 裡的一個屬性 (A property or characteristic of an entity),譬如一個學生的電話,就是一個 attribute,通常用圓/橢圓形表示
- Descriptive attribute: Relationship 中的 attribute
- Attribute categories: attribute 的種類大致有幾種, simple, composite, derived 而 attribute 可以是 single-value 或 multi-value
- simple: 代表一個不可拆分的 attribute
- composite: 代表一個複合的 attribute,可以再被拆解,譬如地址,可以再細分為街/巷/號/樓
- derived: 代表由 attribute 延伸出來,譬如有了生日,就可以算出 derived attribute (現在是幾歲)
- single-value/ multi-value: 代表這個 attribute 是單/多個值
-
- Cardinality: 代表兩者之間的關係,通常來說有 one-to-one, one-to-many, many-to-many 幾種,以下附圖可以參考
- Cardinality views: 可從方向去判斷其表示的意思 (附上原文,我有點不確定有沒有理解錯:Cardinality can be shown as look-across or same-side, depending on where the symbols are shown.)
- Cardinality constraints: 指 cardinality 的對應數量
小結
ERD 基本的要素先寫到這邊,接下來下一篇會來記錄一下實際上在應用 ERD 是如何應用的,希望不要半途而廢
話說,GPT 一出來真的幫了不少忙,在看這篇的時候有一些地方受限於我的英文水平,實在不能明確理解它想要表達的意思,所以求助了一下 GPT 的幫忙,雖然有些內容我覺得有點怪,但確實很大幅度的增進了我的學習效率