Модель данных:
VIDEO_ARTIST
стол
ARTIST_ID
, шт
FIRST_NAME
LAST_NAME
VIDEOS
таблица
VIDEO_ID
, шт
VIDEO_TITLE
ARTIST_ID
, фк
RUNNING_TIME
VIDEO_COPIES
стол
VIDEO_COPY_ID
, шт
VIDEO_ID
, фк
VIDEO_COPY_NUMBER
Обратите внимание, что я не использую первичный ключ для значения, отображаемого для пользователей.
- Количество копий может измениться, но вы не хотите нарушать ссылочную целостность
- Не открывать ключи таблицы
VIDEO_RENTALS
стол
VIDEO_COPY_ID
, рк, фк
ACCOUNT_ID
, рк, фк
DUE_DATE
, шт
VIDEO_RENTALS_ACCOUNTS
стол
ACCOUNT_ID
, шт
ACCOUNT_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