2

期限切れの DVD レンタルのレポート テーブルがあります。店舗には同じ DVD の複数のコピーがあります (それらはすべて識別できるように番号が付けられています)。このデータを正規化して 3NF 要件を満たすにはどうすればよいですか?

正規化 http://img193.imageshack.us/img193/7804/normalization.jpg

4

2 に答える 2

10

データモデル:

VIDEO_ARTISTテーブル

  • ARTIST_ID、pk
  • FIRST_NAME
  • LAST_NAME

VIDEOSテーブル

  • VIDEO_ID、pk
  • VIDEO_TITLE
  • ARTIST_ID、fk
  • RUNNING_TIME

VIDEO_COPIESテーブル

  • VIDEO_COPY_ID、pk
  • VIDEO_ID、fk
  • VIDEO_COPY_NUMBER

ユーザーに表示される値に主キーを使用していないことに注意してください。

  1. コピー数は変更される可能性がありますが、参照整合性を壊したくない場合
  2. テーブル キーを公開しない

VIDEO_RENTALSテーブル

  • VIDEO_COPY_ID、pk、fk
  • ACCOUNT_ID、pk、fk
  • DUE_DATE、pk

VIDEO_RENTALS_ACCOUNTSテーブル

  • ACCOUNT_ID、pk
  • 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
于 2009-11-11T02:57:14.190 に答える
3

オブジェクトを見てください--アクター:

1. Customer
2. Title
3. Physical Medium (DVD, the thing you take home when borrowing)
4. Artist
5. Rental (act of renting = transaction)
  • 1 人のアーティストが多くのタイトル(ムーブ、アルバム) を作成できます。タイトル(アルバム) は、複数のアーティストによって実行できます。
  • 1 つのタイトルに多数の物理メディア(DVD、テープ、ブルーレイ) のコピーを含めることができます。媒体には 1 つのタイトルしかありません。
  • 1枚のメディア(DVD)を複数のお客様(一度に1枚)でレンタルできます。顧客は多くのメディア(DVD)をレンタルできます。メディア (DVD) の可用性を追跡します。Media.Status


レンタルモデル_01

于 2009-11-11T02:47:13.970 に答える