0

我正在使用 InnoDB 并且仍在学习 MYSQL。我正在尝试将歌曲链接到专辑。我的数据库中有什么东西导致了这个问题吗?下面是我的表。


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)
 albumID - int(11)
•   albumpic – varchar(255)
•   tracknum – int(11)
•   songTitle – varchar(255)
•   performer – varchar(255)
•   album – varchar(255)
•   page – varchar(255)
4

2 回答 2

2

假设每首歌(可选)属于一张专辑;在这种情况下,Songs表需要一个外键来引用Albums表中的相关记录。例如,您可以添加一albumID列:

ALTER TABLE Songs
  ADD COLUMN albumID int(11) [NOT] NULL,
  ADD INDEX (albumID),
  ADD FOREIGN KEY (albumID) REFERENCES Albums (albumID);

如果个别歌曲可能与多个专辑相关,您需要创建第三个表,其中包含两个外键 - 歌曲的外键和相关专辑的外键(例如songIDalbumID):

CREATE TABLE AlbumSongs (
  songID  int(11) NOT NULL,
  albumID int(11) NOT NULL,
  PRIMARY KEY (songID, albumID),
  INDEX (albumID),
  FOREIGN KEY (songID)  REFERENCES Songs  (songID),
  FOREIGN KEY (albumID) REFERENCES Albums (albumID)
);
于 2012-05-17T16:19:49.247 回答
1

不确定您在寻找什么,但如果您正在寻找如何创建外键并链接到主表的 PK,那么您可以这样做:

create table Songs
(songID int(11) int not null auto_increment primary key,
albumpic varchar(255),
tracknum int(11),
songTitle varchar(255), 
performer varchar(255),
album varchar(255),
page varchar(255),
albumID int(11),
foreign key (albumID) references Albums (albumID) on delete cascade)
于 2012-05-17T16:24:20.303 回答