數據庫——關系數據庫規范化習題


對以下的關系模式, 分別寫出:
(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,問題解決
 



 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM