有一个过期 DVD 租借的报告表。该商店有同一张 DVD 的多个副本(它们都被编号以便识别)。如何规范化这些数据以满足 3NF 要求?
标准化 http://img193.imageshack.us/img193/7804/normalization.jpg
有一个过期 DVD 租借的报告表。该商店有同一张 DVD 的多个副本(它们都被编号以便识别)。如何规范化这些数据以满足 3NF 要求?
标准化 http://img193.imageshack.us/img193/7804/normalization.jpg
数据模型:
VIDEO_ARTIST桌子ARTIST_ID, PKFIRST_NAMELAST_NAMEVIDEOS桌子VIDEO_ID, PKVIDEO_TITLEARTIST_ID, fRUNNING_TIMEVIDEO_COPIES桌子VIDEO_COPY_ID, PKVIDEO_ID, fVIDEO_COPY_NUMBER请注意,我没有将主键用于向用户显示的值。
VIDEO_RENTALS桌子VIDEO_COPY_ID, pk, fkACCOUNT_ID, pk, fkDUE_DATE, PKVIDEO_RENTALS_ACCOUNTS桌子ACCOUNT_ID, PKACCOUNT_NUMBER, 独特FIRST_NAMELAST_NAMEACCOUNT_NUMBER与VIDEO_COPY_NUMBER...相同的逻辑
这是基于数据模型用于获取您提供的报告示例的 SQL:
SELECT v.video_title 'Video Title',
aa.artist_name 'Artist',
vc.video_copy_number 'Copy Number',
v.running_time 'Length',
vr.due_date 'Date Due',
acct.borrower_name 'Borrower',
acct.account_number 'Card Number'
FROM VIDEO_RENTALS vr
JOIN VIDEO_COPIES vc ON vc.video_copy_id = t.video_copy_id
JOIN VIDEOS v ON v.video_id = vr.video_id
JOIN (SELECT a.artist_id,
a.firstname +' '+ a.lastname AS artist_name
FROM ARTIST a) aa ON aa.artist_id = vr.artist_id
JOIN (SELECT vra.account_id,
vra.account_number,
vra.firstname +' '+ vra.lastname AS borrower_name
FROM VIDEO_RENTALS_ACCOUNTS vra) acct ON acct.account_id = vr.account_id
看对象——演员:
1. Customer
2. Title
3. Physical Medium (DVD, the thing you take home when borrowing)
4. Artist
5. Rental (act of renting = transaction)
Media.Status跟踪媒体 (DVD) 的可用性。