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);

個々の曲が複数のアルバムに関連している可能性がある場合は、2 つの外部キー (曲の外部キーとそれに関連付けられたアルバムの外部キー) を含む 3 番目のテーブルを作成する必要があります (例: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 に答える