Нормализация базы данных 3NF - PullRequest
2 голосов
/ 11 ноября 2009

Существует таблица отчетов для просроченных прокатов DVD. В магазине есть несколько копий одного и того же DVD (все они пронумерованы для идентификации). Как я могу нормализовать эти данные для удовлетворения требований 3NF?

Нормализация http://img193.imageshack.us/img193/7804/normalization.jpg

Ответы [ 2 ]

10 голосов
/ 11 ноября 2009

Модель данных:

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

Обратите внимание, что я не использую первичный ключ для значения, отображаемого для пользователей.

  1. Количество копий может измениться, но вы не хотите нарушать ссылочную целостность
  2. Не открывать ключи таблицы

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
3 голосов
/ 11 ноября 2009

Посмотрите на объекты - актеры:

1. Customer
2. Title
3. Physical Medium (DVD, the thing you take home when borrowing)
4. Artist
5. Rental (act of renting = transaction)
  • Один исполнитель может создавать множество заголовков (ходы, альбомы); название (альбом) может быть исполнено несколькими исполнителями .
  • Один заголовок может иметь много физических носителей (DVD, лента, синий луч) копии; средний имеет только один заголовок .
  • Один средний (DVD) может быть арендован многими клиентами (по одному за раз); клиент может арендовать много носитель (DVD). Media.Status отслеживает доступность носителя (DVD).


rental_model_01

...