我可以对PRIMARY KEY使用哪种附加约束?

问题描述

我希望主键允许某些重复的条目,该怎么写? 我希望一首歌曲具有多种流派。

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 对。这允许一首歌曲具有多种流派。没有限制,因为您可以为每首歌曲添加任意数量的行。

它还可以轻松查询给定流派中的所有歌曲。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...