问题描述
我希望主键允许某些重复的条目,该怎么写? 我希望一首歌曲具有多种流派。
TREATAS
这是我正在处理的代码的摘要。这段代码没有重复的输入值。 假设我们将这些值输入数据库: 体裁 (流派,名字) 1,摇滚 2,国家 3,流行 4,电子
CREATE TABLE songs (
songid INTEGER PRIMARY KEY,title TEXT
)
CREATE TABLE genres (
genreid INTEGER PRIMARY KEY,name TEXT
CREATE TABLE has_a_genre (
songid INTEGER,genreid INTEGER,FOREIGN KEY (songid) REFERENCES songs (songid),FOREIGN KEY (genreid) REFERENCES genres (genreid)
)
当我输入has_a_genre
Songs
(songid,title)
10001,Tomorrow
10002,Sweet Child O' mine
10003,Faded
这不起作用,因为我当前的代码不允许输入10003、4 我该如何允许它?
解决方法
您正在描述多对多关系。使用关系数据库时,这需要一个附加表。
CREATE TABLE Songs (song_id INT PRIMARY KEY,...attributes...);
CREATE TABLE Genres (genre_id INT PRIMARY KEY,...attributes...);
CREATE TABLE SongGenres (
song_id INT,genre_id INT,PRIMARY KEY (song_id,genre_id),FOREIGN KEY (song_id) REFERENCES Songs(song_id),FOREIGN KEY (genre_id) REFERENCES Genres(genre_id)
);
您在SongGenres
的每一行上放置一对 song_id,genre_id 对。这允许一首歌曲具有多种流派。没有限制,因为您可以为每首歌曲添加任意数量的行。
它还可以轻松查询给定流派中的所有歌曲。