###### tags: `database` `note` `thu` {%hackmd theme-dark %} # ER/EER Modeling 回到首頁: [DB-Note](/GbetBojTSMCOFmpVUFB_TQ) ## 簡介 我們的目標就是,在針對生活中的資訊建立資料庫時, 如何有結構的,並最大程度的避免資料庫裡的兩大禁忌: 1. ***不得*** 有 ***空欄位*** (null value) 2. ***不得*** 有 ***重複的資料*** (否則要更新資料的時候就要多個一起更新) 因此我們發展出了ER/EER Diagram。 它可以幫助我們釐清資料和資料之間的關係,以及我們如何去存放他們在schema裡。 本頁會主要聚焦於如何將資料轉換成ER/EER Diagram。 ## 原則 ER-Model將一切的資料都拆解成三個部份 (類似物件導向的概念): ### 1. ***Entity*** / 實體  資料的形成勢必和某些物件或實體(*Entity*)有關。 其中還又有分: - ***Weak Entity***  這種實體只能依存於其它的實體而存在。 他的Primary Key只能在他自己的表格有用,出了他自己就不再是Candidate Key了。 往往會跟Identifying Relationship一起出現。 ### 2. ***Relationship*** / 關係  實體和實體之間的關係(*Relationship*)往往也會產生許多相關的資料。 其中也有分: - ***Identifying Relationship***  當一個實體因另一個實體而存在於這個Database裡時(e.g. 員工的家屬、學校的電腦),就會形成Identifying Relationship。 而主要的實體(e.g. 員工)的Primary Key往往會以Foreign Key的形式被加入次要的實體(e.g. 家屬)的表格裡。 而我們也因為想瞭解實體和實體之間的關係的細節,所以衍生了下列的符號: - ***Partial / Total Particapation***  表示是否每個實體都有"***參加該關係***"。 單線為Partial,雙線為Total。 - ***Cardinality Ratio***  數字表示如果"***雙方都有實體參加該關係的前提下***",那雙方實體的數量比為何。 如果可能為1對多,則是1:N。 如果雙方數量不定,則為M:N。 有時會以下面的符號來表示:  ### 3. ***Attribute*** / 屬性  實體(*Entity*)、實體和實體之間的關係(*Relationship*)往往也都會產出衍生的屬性(*Attribute*)資料。 這些又分成以下幾種: - ***Key Attribute***  通常為該實體/關係的Primary Key。 - ***Multivalued Attribute***  同一個㯗位有時也會有許多同性質的資料。(e.g. 台灣的城市、老師的外號...etc) - ***Composite Attribute***  像是名字、地址之類可以分很多段的資料。 在形成DB Schema時,通常會被打散然後直接分開寫入DB。 - ***Derived Attribute***  當該屬性可以從同一個資料庫中得到線索並算出時,就被稱為Derived Attribute。 e.g. 資料庫內已經有所有部門的清單了。那此時"部門數量"的欄位就是Derived Attribute。 ## Example ### ER-Diagram  ### DB Schema  ### SQL Code  ## Symbols 
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.