Re: [問題]ERD-場地租借 正規化觀念的請教

看板Database作者 (寶貝豬)時間16年前 (2009/05/17 01:47), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
我來回覆一下, 僅供參考. 這要run過實際的case比較清楚, 完全照教科書講的做很多地方會覺得 怪怪的. 不過我離開書本已久, 很多東西都是以實務上能run為主, 有沒有完全 符合書中的要求就不敢確定了. ※ 引述《Hotpenis5566 (痂騎破麻)》之銘言: : 附上ERD http://yfrog.com/5dermodel2j : 字很多....小弟是剛學資料庫的 很想把它學好(組員也擺爛=..=) : 只能靠自己囧 : 很多問題應該都算觀念 有請鄉民替我解惑 : 我想知道自己哪裡對哪裡錯........感恩..... : 幫我看我解釋的 怕我有觀念上的錯誤 (感恩~^^") : 其實看書有點不是很懂 : 我試著用自己的想法寫出來 : (以下開始): : 1.在資料庫裡一開始先畫出大概的主架構(ER MODEL)→不明確也沒關係 : 2.接著將ERD轉換成關聯綱目(也就是很多個Table) : 3.將很多個個關聯綱目做第1.2.3正規化 : 正規化完再去修正ERD 使之更明確 →是這樣嗎= =? 以上同意. 資料關聯架構會改的原因除了可能需求分析階段時有疏漏以外, 還有就是應實際需求而改變, 資料庫的設計是為了配合實務需要的. : 問題: : 1.a.像關聯綱目的定義每一個屬性為簡單且單值 : 豈不是我們要第一正規化這個步驟是多餘的嗎= =? 第一正規化除了要去除掉單一屬性多值的狀況外, 還要去除重複的整筆記錄. 例如, 學生資料表當中出現以下狀況: 王小明,A111222,男,180cm,72kgw 王小明,A111222,男,180cm,72kgw 以上整筆記錄重複兩次, 這明顯不符合第一正規化, 但是在ERD設計時你無法 預測. 在轉為資料表後, 加上條件限制才將這種狀況排除掉. : b.為什麼Relationship不能加主鍵? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 印象中沒聽說過這回事. 這是指什麼情況? 是指在畫ERD時, 只有Entity才能 設主鍵的意思? : 2.a.正規化是只正規實體而已嗎? 為什麼不用正規relationship呢? 同樣沒聽說過這回事. relationship轉成資料表後, 同樣要接受正規化的檢驗. : 是不是因為relationship是正規實體的產物呢? 我比較偏向將relationship視為是更高一階的實體, 用來描述既存實體之間的 關聯. : 譬如:顧客購買商品這一個關聯綱目 : 屬性有 CustomerID CustomerName TradeID TradeProduct : 因為CID和TID是關聯鍵 : {CID,TID}→{CNAME} : 所以拆成兩個滿足2NF : +------------+ +------------+ : |Customer |------Relationship---- | Trade | : +------------+ / \ +------------+ : / \ CID TId / \ : CID CNAME TID TProduct 另外, 以上這張圖我不這麼畫, 我會畫成: [Customer]-(1,n)-< Trade >---(m,1)---[Product] / \ / \ / \ \ CID CNAME CID PID PID Name Price Quantity, Amount, Date Trade是Customer與Product這兩個Entity之間的一種relationship, 不過更進一步地把它視為是建構在Customer與Product上的更高一階的 Entity會更容易引導思考. : b 如果一個關聯綱目只有一個關聯鍵它一定滿足2NF嗎? : (如果不是可以幫我舉一個例子嗎?) : 換句話說2NF的定義是不是一個關聯綱目裡有兩個以上關聯鍵 : 並且找到一個非關聯鍵與關聯鍵有意義上的關係(譬如商品編號 和商品名稱) : 此時就把這整個關聯綱目拆成兩個對嗎? : 因為2NF比較不好理解 : 我再打一個定義上的觀念請教一下.. : A,B,C是關聯鍵 找到一個D與ABC是部分函數相依 : 因為C→D (譬如學生學號 對應學生姓名) : 所以要拆成兩個表格{A,B,......}和{C,D......} : 再去檢查{A,B...}這個關聯網目裡有沒有滿足2NF這樣 : 有點像遞迴這樣= =? 可能名詞定義上有點混淆, 你說的"關聯鍵", 意思應該是要說"被選為做主鍵的 屬性組"吧? 當{A,B,C}這組屬性被選做當主鍵時, 其它的屬性都必須"完全依附" 於{A,B,C}才行, 這才滿足2NF. 如果找到某個屬性D, D是依附於C的話, 那麼D對 {A,B,C}就稱為"部份依附", 只要發現有"部份依附"的狀況, 就不符合2NF. 所以 才需要拆表. 註: 我覺得"相依"翻得不好, 好像是彼此互相依附的意思, 容易引起誤會. 所以 我用"依附"代替"相依". : 3. 第三正規化 : 譬如 : 學生學號 學生姓名 學生系所 學生年級 學生住址 學生的房東 房東電話 : 一個學號對應一個學生住址 : 一個學生住址對應一個房東 所以不滿足3NF : 故需拆成(學號.....住址) 和(住址....電話) : 這樣= ="? 不知道有沒有講錯 3NF要排除掉"遞移依附"的狀況. 以"學生學號"為主鍵來說, 透過學生學號可以 查到以上任何一個屬性. 但是"房東電話"應該也能夠透過"學生的房東"查到才對. 意即: 學生學號 -查-> 學生房東 -查-> 房東電話 | ^ +--------------查------------+ 這就出現"遞移依附"的狀況了. 意即"房東電話"依附在"學生房東"上, 而 "學生房東"又依附在"學生學號"上. 最後補充一點: 如果"學生房東"是"候選鍵"的話, 那麼這樣並不違反3NF, 但在這裏"學生房東"顯然不能當成"候選鍵"來用, 因此這個例子確實違反3NF. : 4.(最後一個了) : 如果一開始的ERD畫的夠詳盡明確 是不是就省下正規化的時間 : 我看我的TABLE實在想不出來可以哪裡可以再改進了= =? : 請好心大大幫我看一下 Orzzzzzzzzzzzzz 嗯..感覺有些是多餘的. 我在之前的回文曾經畫了一個資料關聯圖. 或許可以參 考看看. 不過若硬要我劃"正統的ERD", 那我大概也畫不好. XD : +-------------------------+ : |學生 | : +-------------------------+ : | 學號 {主鍵} | 49635001 張小明 資管 3 091234567 : | 姓名 | : | 系 所 | : | 年級 | : | 電話 | : +-------------------------+ : +----------------------------+ : | 預定 | : +----------------------------+ : |學生學號 (外部鍵) | : |預定流水號 (外部鍵) | : | | : | | : | | : | | : +----------------------------+ : +-------------------------+ : |預定單 | : +-------------------------+ : | 預定流水號 (主鍵} | 1 49635001 A101 20090516 08:00 Null : | | 20090517 10:00 20090517 12:00 預約中 Null : | | : | 申請日期 | 2 49635001 A102 20090516 08:05 Null : | 取消日期 | 20090518 19:00 20090518 21:00 200 : | 使用開始時間 | : | 使用結束時間 | : | 使用狀態(預約中,取消) | : | 晚間開燈費用 | : | | : | | : +-------------------------+ : ~ : +----------------------------+ : |紀錄 | : +----------------------------+ : |預定單流水號 (外部鍵) | : |場地編號 (外部鍵) | : | | : | | : | | : | | : +----------------------------+ : +-------------------------+ : |場地 | : +-------------------------+ : |編號 {主鍵} | A101籃球場A : |名稱 | A102排球場A : | | : | | : +-------------------------+ : ~ : +-------------------------+ : |優先預定 | : +-------------------------+ : | 場地編號 (外部鍵) | A101 00153 20090517 08:00 20090517 10:00 : | 課程編號 (外部鍵) | : | 課程開始時間 | //這在學期初就匯入資料庫 : | 課程結束時間 | 如果要設定時是不是在程式端設定第一天上課後 : | | 每加七天同一時段不能外借給學生= =? : +-------------------------+ : ~ : +-------------------------+ : |體育課程 | : +-------------------------+ : |課程編號 {主鍵} | 00153 : |課稱名稱 | 籃球3 : |老師姓名 | 王大同 : | | : +-------------------------+ : ~ : +-------------------------+ : |設備租借 | : +-------------------------+ : | | 001 49635001 A1 50 未還 : |學生學號 (外部鍵) | : |設備ID (外部鍵) | : |借用數量 | : |借用狀態 | : | | : +-------------------------+ : +-------------------------+ : |設備 | : +-------------------------+ : |設備ID {主鍵} | A1 籃球 150 : |設備名稱 | : |庫存數量 | : | | : +-------------------------+ : ~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.190.247

05/20 21:53, , 1F
推認真
05/20 21:53, 1F
文章代碼(AID): #1A3lnEpu (Database)
文章代碼(AID): #1A3lnEpu (Database)