1

在音乐库 MySQL 数据库遇到困难后,我需要帮助尝试设置外键。我有多个表:专辑、歌曲、流派、音乐视频、独奏和组。每个特定表都有 ids、names 和其他列。每个 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)

4

1 回答 1

1

我认为这是我较早的答案之一...如果您已用INT(11)作主键,则外键定义应类似于下表的Artistsand定义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在列定义中省略 。

于 2012-05-15T01:15:16.403 回答