3

わかりました、アルバムと画像テーブルがあります。

アルバムには多くの画像を含めることができます。

ただし、画像が常にアルバムに属しているとは限りません。それはスタンドアロンである可能性があります。

image テーブルの album_id に null を追加するか、album_id と image_id の間にテーブルを作成することをお勧めします。画像は 1 つのアルバムにのみ属することができるため、結合テーブルの image_id に一意の制約を追加します。

したがって、オプション 1) 画像テーブルの null フィールド オプション 2) image_id に一意の制約があるテーブルを結合する

これは識別関係または非識別関係のいずれかであると読みました。私が非識別関係を持っている場合でも、フィールドを null として正しく設定する必要があります。言い換えれば、非識別関係は非必須に設定する必要があります - null は正しいですか?

4

2 に答える 2

2

関係が 1 対多の場合、ここではNULLon のimages.album_id方が適切です。テーブルにalbum_idとその外部キー制約を定義する場合、許可は、イメージに親アルバムがない可能性があることを示しています。この設計では、1 対多のアルバムを画像に許可すると同時に、孤立した画像も許可します。imagesNULL

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)
)
于 2012-08-19T13:35:39.080 に答える
1

個人的には、間にテーブルを置きます。

これにより、画像を単独で使用できます。
とアルバム自体。
必要に応じて、それらを中央のテーブルに関連付けることができます。複数のアルバムに同じ画像、同じアルバムに複数の画像。

このようにすれば、ビジネス ルールが変更された場合でも、後で yout テーブルの定義を変更する必要はありません。

于 2012-08-19T13:43:59.610 に答える