對以下的關系模式, 分別寫出:
(1)碼 ,主屬性,非主屬性?
(2)函數依賴?
(3)屬於第幾范式?為什么?
(4)有什么問題?
(5)如何分解?分解后能否達到幾范式? 原問題是否解決?
ps(函數依賴的方法:
1.先找出碼,再寫出碼函數依賴:碼-〉其他屬性
2.再寫出其他非碼的函數依賴
)
1 SCG(Sno, Sname, Sage, Cno, Grade)
(1)碼:(SNO,CNO) 主屬性: SNO,CNO
非主屬性:SNAME,SAGE,GRADE
(2)函數依賴:(SNO,CNO)-〉SNAME,(SNO,CNO)-〉SAGE,(SNO,CNO)-〉GRADE
SNO-〉SNAME,SNO-〉SAGE
(3)屬於第幾范式,為什么?
存在非主屬性sname部分函數依賴於碼,是1范式
(4)有什么問題?
問題⒈ 數據冗余大 每一個學生的姓名年齡重復出現 浪費大量的存儲空間
問題⒉ 修改困難 例:某學生要修改姓名或年齡,系統必須修改多次
問題3.插入異常 假設某學生(新生)還未選課,因課號是主屬性,按實體完整性約束,該學生的信息無法插入 ----該插入的不能插入
問題4.刪除異常 假定某個學生本來只選修了一門課。現在因身體不適,他連這門程也不選修了,要刪除該選課。此操作將導致該學生信息也被刪除 -----不該刪的刪了
(5)如何分解?分解后能否達到幾范式? 原問題是否解決?
S(SNO,SNAME,SAGE)
SC(SNO,CNO,GRADE)
達到2NF,原問題解決
學生Sname,Sage不重復存儲
Sname,Sage的修改只改一次
學生未選課,也能插入到S表
一個學生選課全刪除,學生信息還存在
2 SP(SNO, SNAME,SCITY, PNO, PNAME, QTY)
供應商號,供應商名,供應商城市,零件號,零件名,數量
(1)碼:(SNO,PNO) 主屬性:SNO,PNO 非主屬性:SNAME,SCITY,PNAME,QTY
(2)函數依賴:(SNO,PNO)->SNAME,(SNO,PNO)->SCITY,(SNO,PNO)->PNAME,(SNO,PNO)->QTY,
SNO->SNAME,SNO->SCITY,PNO->PNAME
(3)屬於第幾范式,為什么?存在非主屬性SNAME部分函數依賴於碼,是1范式
(4)有什么問題?數據冗余,修改困難,插入異常,刪除異常
(5)如何分解?分解后能否達到幾范式? 原問題是否解決?
S(SNO,SNAME,SCITY)
P(PNO,PNAME)
SP(SNO,PNO,QTY)
達到2NF,原問題解決
1 SL(SNO,SNAME,SDEPT,SLOC)
學號, 姓名, 系名, 系住處 ,一個系的學生住處相同
(1)碼: SNO 主屬性:SNO 非主屬性:SNAME,SDEPT,SLOC
(2)函數依賴:
Sno→Sdept Sno→Sname Sno→Sloc Sdept→Sloc
(3)屬於第幾范式,為什么?存在非主屬性SLOC傳遞函數依賴於碼,是2范式
(4)有什么問題?
數據冗余度大:每個系的學生都住在同一個地方,關於系的住處的信息卻要重復存儲與該系學生人數相同的次數。
修改困難:當學校調整學生住處時,比如信息系的學生全部遷到另一個地方住,由於每個系住處的信息重復存儲,修改時必須同時更新該系所有學生的Sloc
插入異常:如果某個系剛成立,目前暫時沒有在校學生,無法把系住處的信息存入數據庫。
刪除異常:如果某個系的學生全部畢業了,在刪除該系學生信息的同時,把這個系住處的信息也刪除了。
(5)如何分解?分解后能否達到幾范式? 原問題是否解決?
SD(Sno, Sname, Sdept)
DL(Sdept, Sloc)
原問題解決
存儲系住處信息不再冗余
修改系住處容易
新系成立可以插入
刪除一個系的所有學生,系的信息仍然存在
2職工(職工編號,姓名,基本工資,職務,職務工資 )
職工編號不重復,每種職務有固定的職務工資
(1)碼: 職工編號 主屬性:職工編號 非主屬性: 姓名,基本工資,職務,職務工資
(2)函數依賴:
職工編號->姓名, 職工編號->基本工資, 職工編號->職務, 職工編號->職務工資
職務->職務工資
(3)屬於第幾范式,為什么?
存在非主屬<職務工資>性傳遞函數依賴於碼,是2范式
(4)有什么問題?
職務工資數據冗余,每個職務的工資會多次出現。
修改職務工資困難,想要修改相應職務的工資需要修改多次。
插入異常,如果有一個新職務,但沒有職工獲得這個職務,該職務便無法插入。
刪除異常,刪除一個職務的所有職工會刪除這個職務的信息。
(5)如何分解?分解后能否達到幾范式? 原問題是否解決?
職工(職工編號,姓名,基本工資,職務 )
職務(職務,職務工資 )
原問題解決
3銷售發票(發票號,商品號,商品名,數量,銷售單價,日期)
發票號不重復,每個商品號有一個商品名[10分]
(1)碼: 發票號 主屬性: 發票號 非主屬性:商品號,商品名,數量,銷售單價,日期
(2)函數依賴:
發票號->商品號,發票號->商品名,發票號->數量,發票號->銷售單價,發票號->日期
商品號->商品名
(3)屬於第幾范式,為什么?
存在非主屬<商品名>性傳遞函數依賴於碼,是2范式
(4)有什么問題?
商品名數據冗余,每個商品的商品名會多次出現。
修改商品名困難,要修改商品名要修改多次。
如有新商品,但沒有賣出去開不出發票,商品名便無法插入。
刪除一個商品名的所有發票會刪除這個商品的信息
(5)如何分解?分解后能否達到幾范式? 原問題是否解決?
銷售發票(發票號,商品號,數量,銷售單價,日期)
商品(商品號,商品名)
原問題解決
1 關系模式 STC(S,T,C)
S學生,T教師,C課程。
(1)每一位教師僅教一門課,每門課有若干個教師教
(2)某個學生選定一門課后,就對應一個確定的教師(不能重復選同一門課)
(3)某個學生選定一個教師后,就對應一門確定的課程
(1)碼:(S,C),(S,T) 主屬性:S,C,T,非主屬性:無
(2)函數依賴?
T->C,(S,C)->T ,(S,T)->C
(3)屬於第幾范式?為什么?
函數依賴T->C左邊不含有碼,存在主屬性對碼的部分函數依賴,達不到BCNF, 但又不存在非主屬性對碼傳遞依賴和部分函數依賴,是3范式
(4)有什么問題?
數據仍有許多冗余。教師上課的信息與學生選此課的人數一樣多。
更新異常:某教師上課的信息要修改,要改多行。
插入異常:當某門課本學期不開,自然就沒有學生選修。沒有學生選修,教師上該課程的信息就無法插入到數據庫中。
刪除異常:當學生修完某課程,則把此學生記錄刪除的同時,也刪除了教師開該課程的信息。
(5)如何分解?分解后能否達到幾范式? 原問題是否解決?
ST(S,T)
TC(T,C)
達到BCNF,問題解決