有一个过期 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_NAME
LAST_NAME
VIDEOS
桌子VIDEO_ID
, PKVIDEO_TITLE
ARTIST_ID
, fRUNNING_TIME
VIDEO_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_NAME
LAST_NAME
ACCOUNT_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) 的可用性。