Sql 3NF数据库规范化
有一个逾期DVD租赁的报告表。商店有同一DVD的多个副本(它们都编号以便识别)。如何规范化此数据以满足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)可供许多客户租用(一次一张);客户可以租赁许多媒体(DVD)<代码>媒体。状态跟踪媒体(DVD)的可用性
数据模型:
视频艺术家
表格
,主键艺术家ID
名字
姓氏
视频
表格
,主键VIDEO\u ID
VIDEO\u TITLE
,fk艺术家ID
运行时间
视频拷贝
表格
,主键VIDEO\u COPY\u ID
,fkVIDEO\u ID
VIDEO\u COPY\u NUMBER
视频租赁
表格
,主键,fkVIDEO\u COPY\u ID
,主键,fk账户ID
- 到期日,主键
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