作者bobju (寶貝豬)
看板Database
標題Re: [SQL ] 請問這張表到底是...?
時間Tue Jan 12 10:32:48 2010
※ 引述《g001613001 (月)》之銘言:
: 表基本上漲這樣子
: _______________________________________________________________________
: 研習活動代號:a01 研習會名稱:SQL基礎技能(I) 研習活動天數:3天 |
: _______________________________________________________________________|
: 員工代號| 員工姓名 |_______________________簽到日______________________|
: | | 01/01/2009| 01/02/2009 | 01/03/2009|總共缺席次數 |
: ________|__________|___________|____________|____________|_____________|
: A001 小王 X ˇ ˇ 1 |
: A002 小強 ˇ ˇ ˇ 0 |
: A003 小圈 ˇ ˇ ˇ 0 |
: ... |
: A050 小捲 ˇ ˇ ˇ 0 |
: _______________________________________________________________________|
: 研習人數:50人 |
: _______________________________________________________________________|
: 我想問正規化的問題
: 我現在卡在,簽到日,它到底是多值屬性,還是組合屬性?
當做是研習活動的多值屬性來看是準沒錯, 它們的關聯是:
研習活動 1 <= n 簽到日 , 1場研習活動有n個簽到日, 簽到日是依附在研習活動
上.
(這裏暫且簡化討論問題的範圍. 因為實務上, 有可能同一個簽到日有好幾場
研習活動, 那就是 m-n 的關係.)
: 我個人覺得它是組合屬性,由三天的日期以及缺席次數組成的。
要當成是組合屬性的話, 你要考慮到如果有好幾場不同的研習活動, 而每場
研習活動的簽到日的日期及天數各自不同, 那麼你的組合屬性將無法維持一致.
: 但是我們老師只交過我們處理多值屬性,沒交過組合屬性怎麼處理。
: 請問如果是組合屬性應該怎麼處理?
不管是多值屬性或是組合屬性, 就是改用一個weak entity包起來處理.
: 我自己判斷假設是多值的話,我會處理成如下
: 第一正規化
: 表1 |研習活動代號PK|研習會名稱|研習活動天數|總共缺席次數|研習人數|
: 表2 |研習活動代號FK+員工代號=PK|員工姓名|簽到日|
: 請問各位前輩 能指點一下迷津嗎?
: 兩個問題, 我有問題的簽到日那裡是否是組合屬性?是的話怎麼處理?
以下試擬 ER model:
研習活動 1 <= n 簽到日 1 <=+ m
+ == 簽到記錄
員工 1 <===================+ n
研習活動: (研習活動id), 活動名稱, etc...
簽到日: (研習活動id, 日期), etc...# 這裏略過同一個簽到日有多場研習活動.
員工: (員工id), 姓名, etc...
簽到記錄: (研習活動id, 日期, 員工id), 簽到時刻, 出缺席狀態
以上括弧括起來的代表該主體的主鍵.
簽到記錄中的'出缺席狀態'是可有可無的, 因為可以從簽到時刻來判斷.
簽到時刻初始值是null, 有簽到才有給值. 所以簽到時刻是null, 就代表
該員工於該簽到日在該場研習活動當中缺席.
至於研習活動天數, 研習人數, 總共缺席次數這三個欄位是可有可無的,
因為它們可以在需要呈現時, 透過SQL query的統計函式取得, 而非必要
的原始資料.
: 以及我假設是多值屬性 這樣處理對嗎?
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.115.151.184
推 g001613001:喔喔 謝謝 我在研究一下^^ 01/12 21:27
推 jayfish:推,有經驗 01/16 09:06