Sql 3NF数据库规范化

Sql 3NF数据库规范化,sql,database,database-design,data-modeling,normalization,Sql,Database,Database Design,Data Modeling,Normalization,有一个逾期DVD租赁的报告表。商店有同一DVD的多个副本(它们都编号以便识别)。如何规范化此数据以满足3NF要求 观察对象——参与者: 一个艺术家可以创作许多标题(动作、专辑);一个标题(专辑)可以由多个艺术家表演 一个标题可以有许多物理介质(dvd、磁带、蓝光)拷贝;一个中等的只有一个标题 一张中档(DVD)可供许多客户租用(一次一张);客户可以租赁许多媒体(DVD)媒体。状态跟踪媒体(DVD)的可用性 数据模型: 视频艺术家表格 艺术家ID,主键 名字 姓氏 视频表格 VIDEO

有一个逾期DVD租赁的报告表。商店有同一DVD的多个副本(它们都编号以便识别)。如何规范化此数据以满足3NF要求

观察对象——参与者:

  • 一个艺术家可以创作许多标题(动作、专辑);一个标题(专辑)可以由多个艺术家表演
  • 一个标题可以有许多物理介质(dvd、磁带、蓝光)拷贝;一个中等的只有一个标题
  • 一张中档(DVD)可供许多客户租用(一次一张);客户可以租赁许多媒体(DVD)<代码>媒体。状态跟踪媒体(DVD)的可用性

数据模型:

视频艺术家
表格
  • 艺术家ID
    ,主键
  • 名字
  • 姓氏
视频
表格
  • VIDEO\u ID
    ,主键
  • VIDEO\u TITLE
  • 艺术家ID
    ,fk
  • 运行时间
视频拷贝
表格
  • VIDEO\u COPY\u ID
    ,主键
  • VIDEO\u ID
    ,fk
  • VIDEO\u COPY\u NUMBER
请注意,对于显示给用户的值,我没有使用主键

  • 副本编号可以更改,但您不希望破坏引用完整性
  • 不要公开表键
  • 视频租赁
    表格
    • VIDEO\u COPY\u ID
      ,主键,fk
    • 账户ID
      ,主键,fk
    • 到期日,主键
    VIDEO\u RENTALS\u ACCOUNTS
    表格
    • 账户ID
      ,主键
    • 账号
      ,唯一
    • 名字
    • 姓氏
    关于
    账号的逻辑与
    视频拷贝账号的逻辑相同

    以下是基于数据模型的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
    

    如果是这样,请标记为[家庭作业]。这有点像家庭作业问题:你希望我们为你做作业吗?也许如果你展示了你迄今为止所做的,以及你所坚持的,人们会更愿意帮助你。毫无疑问,鉴于样本数据,这是一个家庭作业问题。
    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