gpt4 book ai didi

mysql - 音乐/音乐会数据库的标准化

转载 作者:行者123 更新时间:2023-11-29 19:07:42 28 4
gpt4 key购买 nike

在阅读我的书并浏览一些 YouTube 教程后,我对标准化的理解是,重要的事情之一就是不要有重复的值。更具体地说,主键 (ID) 不应重复。

因此,如果我正在使用音乐/音乐会数据库中的某些表,那么以下情况会很糟糕:

**CREATE TABLE Artists**                                                     

ArtistID INT *PRIMARY KEY*
ArtistName VARCHAR(30)
Albums
  • ^在“艺术家”表中包含专辑会很糟糕,因为只有一个许多专辑的艺术家。因此ArtistID 必须出现多行[艺术家的每张专辑一次]

问题:像这样的表是否应该有一个与另一个表关联的外键?我会想到的相关表显然是相册。

相册将包含如下列:

CREATE Table Albums (
Album_ID INT NOT NULL AUTO_INCREMENT,
Album_Name VARCHAR(30),
Artist VARCHAR(30),
Release_Date DATETIME,
Genre or GenreID,
Primary Key (Album_ID) );

问题:但是专辑有歌曲。但是,我不能将专辑 ID 作为主键,然后让所有歌曲都具有专辑 ID 的重复主键,可以吗?因此,我应该将“歌曲”属性保留在专辑表之外吗?

最佳答案

问题:像这样的表是否应该有一个与另一个表关联的外键?我会想到的相关表显然是相册。

如果艺术家和专辑之间的关系是一对多...(如果规则是一个“艺术家”可以有零个、一个或多个“专辑”,并且一个“专辑”恰好属于一个“艺术家” )

我们将通过将 artist_id 存储为 album 表上的外键列来实现这种关系。

类似这样的事情:

艺术家:

artist
------
id 'PK'
name varchar

专辑:

album
-----
id 'PK'
artist_id 'FK ref artist.id'
title
year
artwork

通过在 albumartist_id 列中存储一个值,该值是对 artist 表中行的引用。

艺术家:

 id    name
---- --------
1 Kansas
2 Styx

专辑:

 id    artist_id  name                  year
---- --------- -------------------- ----
432 1 Leftoverture 1976
435 1 Point of Know Return 1977
438 1 Monolith 1979
561 2 Grand Illusion 1977

问题:但是专辑有歌曲。 ...因此,我是否应该将“歌曲”属性保留在专辑表之外?

是的。如果albumsong之间是一对多关系,则将album_id存储在song表中。

像这样:

歌曲:

song
----
id 'PK'
album_id 'FK ref album.id'
song_title
lyrics

歌曲

id    album_id  song_title         
---- -------- ------------------------
6777 435 Dust In The Wind
6801 438 People of the South Wind
5555 561 Come Sail Away

song表中的一行,我们可以使用存储在album_id列中的值来查找相关的专辑

album表中的一行,我们可以使用存储在artist_id列中的值来查找artist中的相关行。

<小时/>

这些示例基于所描述的简单的一对多关系。

重要的是,我们将实体之间关系的这些规则转化为合理的表示。我们需要知道关系是一对多还是多对多。

关于mysql - 音乐/音乐会数据库的标准化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43353180/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com