如何使用phpMyAdmin和Foreign Keys制作音乐库?

时间:2012-05-15 01:10:39

标签: mysql sql phpmyadmin

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)

1 个答案:

答案 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