在Music library MySQL database遇到困难后,我需要帮助尝试设置外键。我有多个表:专辑,歌曲,流派,音乐视频,独奏和群组。每个特定表都有id,名称和其他列。每个id都是int(11)的主键。 Solo和Group代表独奏艺术家和团体。 (soloID和groupID是他们的主键)
这可能是我设置数据库的方式。
Solo
• djuIDs – int(11)
• profilepic – varchar(255)
• engname – varchar(255)
• korname – varchar(255)
• engbn – varchar(255)
• occupation – set
• recordlabel – varchar(255)
• debut - date
• dateofbirth – date
• officialsite - varchar(255)
• sitename –varchar(255)
• page – varchar(255)
Group
• djuIDs – int(11)
• profilepic – varchar(255)
• engname – text
• korname – text
• members – text
• recordlabel – varchar(255)
• debut – date
• officialsite - varchar(255)
• sitename –varchar(255)
• page – varchar(255)
Albums
• albumID – int(11)
• albumpic – varchar(255)
• albumthpic – varchar(255)
• albumTitle – varchar(255)
• performer – varchar(255)
• type – set (ex: ep, sp, studio)
• titletrack – varchar(255)
• genre
• releasedate – date
• distributor – varchar(255)
• page – varchar(255)
Songs
• songID – int(11)
• albumpic – varchar(255)
• tracknum – int(11)
• songTitle – varchar(255)
• performer – varchar(255)
• album – varchar(255)
• page – varchar(255)
Music Videos
• mvID – int(11)
• title – varchar(30)
• mvpic – varchar(255)
• performer – varchar(255)
• album – varchar(255)
• releasedate – date
• vURL – varchar(255)
Genres
• genreID – int(11)
• genreName –varchar(30)
• information – varchar(255)
答案 0 :(得分:1)
我认为这是我较早的答案之一......如果您使用INT(11)
作为主键,则外键定义应类似于Artists
的以下表定义和Albums
:
CREATE TABLE Artists (
/* will later be defined as a FK Albums.artistid */
id INT NOT NULL PRIMARY KEY,
name VARCHAR(1024) NOT NULL,
description TEXT
) ENGINE=InnoDB;
CREATE TABLE Albums (
id INT NOT NULL PRIMARY KEY,
artistid INT NOT NULL,
release_date DATETIME,
genreid INT NOT NULL,
picture BLOB,
FOREIGN KEY (artistid) REFERENCES Artists (id),
FOREIGN KEY (genreid) REFERENCES Genres (id)
) ENGINE=InnoDB;
由于您已将所有PK列定义为INT(11)
,因此请确保在相关表中使用相同的数据类型。例如,artistid INT NOT NULL
假定Artists
中引用的列定义为id INT NOT NULL
。
在上面的定义中,我将FK列设为NOT NULL
,但这并非绝对必要。例如,您可以拥有一个带有NULL艺术家的专辑。如果您认为这是可能的,您应该能够省略列定义中的NOT NULL
。