sql - 仅引用其他 2 个表的表的原因?
问题描述
对于我的课程作业,我得到了一些乙烯基商店的示例(Postgres)SQL 代码。
数据库的一部分是一个album
表,用于存储有关专辑的信息(标题、流派等)和一个artist
表,用于存储有关专辑歌手的信息(名称、流派)。
您可以在下面看到我正在处理的代码:
create table album
(
albumID varchar(8) primary key,
album_title varchar(50) not null,
album_genre varchar(20) not null,
album_label varchar(25) not null,
album_catalogue_no varchar(15) not null,
album_release_date varchar(4) not null,
album_type varchar(10) not null
);
create table artist
(
artistID varchar(8) primary key,
artist_name varchar(40) not null,
artist_genre varchar(20) not null
);
create table albumartist
(
primary key (albumID, artistID),
albumID varchar(8) references album(albumID),
artistID varchar(8) references artist(artistID)
);
我正在努力理解,为什么albumartist
存在?
artistID
放在album
桌子上不是更容易吗?
(在有人说之前,我现在无法联系我的讲师,这就是我在这里询问的原因)
解决方案
为了扩展该评论,该表albumartist
是一个关联实体artist
,这意味着它充当了和album
表之间的多对多桥梁。通过添加这个联结表,它允许一个专辑拥有多个艺术家,一个艺术家拥有多个专辑。
查看您对albumartist
表的定义,我倾向于将其更改为此,因为在该表中设置一行null
值是没有意义的:
create table albumartist
(
primary key (albumID, artistID),
albumID varchar(8) not null references album(albumID),
artistID varchar(8) not null references artist(artistID)
);
推荐阅读
- java - 导入的 maven 项目在 STS 中不起作用
- node.js - 没有建议的筹码
- java - 我总是在 Spring 控制器的 **transferReceivedData** 对象中得到 null
- ruby-on-rails - Rails::ActiveRecord 在深拷贝副本中保留 auto_increment id
- sql - 查找组中的前 3 个值时,“查询不包括指定的表达式作为聚合函数的一部分”
- bash - 空白扩展测试`[[]]`不起作用
- jmeter - JMeter 插件 - 什么是“jpgc - 标准集”插件
- c# - c#读取串口时在控制台上看到希伯来语
- rust - Julia 和 Rust 之间的交互
- c++ - C++ InsertAtFront 中的链表