web-dev-qa-db-ja.com

NULLを許可するMySQL外部キー?

画像ウェブサイトをつなぎ合わせています。基本的なスキーマは非常に単純なMySQLですが、イメージに関連付けられている可能性のある管理フラグ(「不適切」、「著作権」など)を表現しようとすると問題が発生します。私の現在の概念は次のとおりです。

tblImages (
    imageID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ...
);

tblImageFlags (
    imageFlagID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    imageID INT UNSIGNED NOT NULL,
    flagTypeID INT UNSIGNED NOT NULL,
    resolutionTypeID INT UNSIGNED NOT NULL,
    ...
);

luResolutionTypes (
    resolutionTypeID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    resolutionType VARCHAR(63) NOT NULL,
    ...
);

(読みやすくするために切り捨てられました;各種の外部キーとインデックスが整然と並んでいます、私は誓います)

tblImageFlags.flagTypeIDはフラグ型のルックアップテーブルで外部キー化され、想像できるようにtblImageFlags.resolutionTypeIDshouldは外部キー化されますluResolutionTypes.resolutionTypeID。手元の問題は、フラグが最初に発行されたとき、論理的な解決タイプがないことです(これをNULLの適切な使用法として宣言します)。ただし、値が設定されている場合は、ルックアップテーブルに対して外部キーを設定する必要があります。

この状況に対するMySQL構文の回避策が見つかりません。存在しますか?次点者は次のとおりです。

  • 「モデレートされていない」解像度タイプを追加する
  • NULLエントリをluResolutionTypes.resolutionTypeIDに追加します(これはAUTO_INCREMENT列でも機能しますか?)

洞察力をありがとう!

PS Bonusは、データベースの場合は「インデックス」か「インデックス」かを教えてくれる人を指します。


フォローアップ:テーブル構造の構文エラーであることが判明したビル・カーウィンに感謝します(NULLを許可する場合は、NOT NULLに列を設定しないでください) !)。そして、それらのボーナスポイントを与えるのに十分なカルマができたら、私は:)

64
kyle

これを解決するには、外部キー列にNULLを許可しますtblImageFlags.resolutionTypeID


PSボーナスは、データベースの場合、「インデックス」か「インデックス」かを教えてくれる人を指します。

複数のindexindexesでなければなりません。

ブライアンA.ガーナーによる「 Modern American Usage 」によると:

通常の目的では、indexesが複数形であり、indicesではありません。 ...インデックス、ただし、foraまたはdogmata、それにもかかわらず大げさです。一部の作家は、数学や科学のように技術的な文脈でindicesを好みます。 indexの最良の複数形ではありませんが、indicesはある意味で許容されます「インジケータ」。 ...単数indice、複数indices

97
Bill Karwin