• ベストアンサー

ER図の外部キー

はじめまして ER図の書き方でFK(外部キー)として記載できるもしくは そう呼べるのはinnodbでの環境に限るのでしょうか? mysqlでmyisamにて構築しているのですが 例えば注文テーブルに商品IDや顧客ID、受注スタッフID、発注スタッフID等の カラムがあったとして、そらぞれのカラムは商品テーブル、顧客テーブル、 スタッフテーブルのプライマリーキーです。 この場合、商品IDは外部キーと呼べるのでしょうか。 また発注スタッフIDが必ず登録されているとは限らないのですがこれも外部キー と呼べるのでしょうか。 よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 実装としての外部キー制約と、モデリングをしている時の外部キーとしての表記は分けて考えましょう。  モデリングをしている時に、属性間の関係を設計する時には、採用するデータベースシステムが外部キー制約をサポートしているかに関わらず、ちゃんと関係を明記するべきです。  ER図に記載された関係を、実データベースで制約として明記できるかどうかは、実装の時に考えることで、これは、ER図が完成してから評価することです。  外部キーの要件は、次の通り。  ・参照する側の属性に指定された値は、必ず参照される側の属性の値として存在しなくてはいけない。  ・参照する側の属性に指定された値で、必ず参照される側の列が一意に定まらなくてはならない。  発注スタッフIDが存在するとは限らないと言うことは、一つ目の要件に反します。この関係が外部キー制約として実装されているとすると、そのような発注スタッフIDを持つレコードは、注文テーブルに登録することが出来ません。  商品IDについても同じように考えてください。

sooooochin
質問者

補足

早速の回答有難うございます。 私の説明が悪かったのですが、発注スタッフIDが存在しないというのはスタッフのマスターテーブルにはあります。ただ受注はしたが未発注の場合などのように、注文テーブルにはNULLで登録されるレコードがある場合のことです。これも外部キーと表記してもよいという事でしょうか。 よろしくお願いします

その他の回答 (1)

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

 あぁ。そういう事ですね。  なら、ありです。  外部キー制約をかけた子表(参照する側)の該当属性に対してNULLを禁止することはありません。・・・本来NULLの意味からすると、NULLはいかなる値とも等しくないので、当然外部キー指定のある属性値にはなり得ないのですが、これは、許容されています。  ただし、select 文で内部結合を使って、注文テーブルとスタッフテーブルを結合すると、その発注スタッフIDがNULLのレコードは、結果として帰ってこないことに注意が必要です。内部結合では、結合対象のいずれかのフィールドがNULLだと、どのような結合条件であったとしても、必ず条件が不成立となるからです。これは、NULLを対象とした比較演算子の結果から導かれます。  

sooooochin
質問者

お礼

ご丁寧な回答頂き、助かりました。 どうもありがとうございました。