関係が 1 対多の場合、ここではNULL
on のimages.album_id
方が適切です。テーブルにalbum_id
とその外部キー制約を定義する場合、許可は、イメージに親アルバムがない可能性があることを示しています。この設計では、1 対多のアルバムを画像に許可すると同時に、孤立した画像も許可します。images
NULL
CREATE TABLE albums (
album_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
othercol VARCHAR()
)
CREATE TABLE images (
image_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
album_id INT NULL,
FOREIGN KEY (album_id) REFERENCES albums (album_id)
)
画像が多対多の関係で複数のアルバムに属する必要がある場合は、それらを関連付けるために間にテーブルが必要になります。これにより、特定の画像に関連する行がない場合でも孤立が許可さalbum_images
れます。
CREATE TABLE albums (
album_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
othercol VARCHAR()
)
CREATE TABLE images (
image_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
othercol VARCHAR()
)
/* Link albums to images as many times as necessary */
CREATE TABLE album_images (
album_id INT NOT NULL,
image_id INT NOT NULL,
FOREIGN KEY (album_id) REFERENCES albums (album_id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (image_id) REFERENCES images (image_id) ON DELETE CASCADE ON UPDATE CASCADE,
/* composite key on the two, ensuring uniqueness */
PRIMARY KEY (album_id, image_id)
)