web-dev-qa-db-ja.com

ERD図のオプションの関係

データベースのエンティティリレーションシップダイアグラムを生成すると、次のようなことが発生しました。

enter image description here

この図(IDEF1X表記)は、次のことを示しています。

  1. 私たちのチームのDB規則では、各プライマリテーブル(つまり、関連付けタイプのテーブルではない)には、db_idという独自の一意のプライマリキーがあります。
  2. iam_projects.db_idiam_project_rulesproject_idフィールド)の外部キーなので、接続線になります。
  3. iam_projects.db_idiam_project_rulesの主キーのnotの一部です(つまり、点線のスタイルです)。
  4. Giveniam_projects.db_idiam_project_rulesに0回以上現れることがあります(したがって、接続線の右端にある黒丸)。

さて、これが私の質問です。表記を理解すると、接続線の左端にあるひし形が左側を「1」から「0または1」に変更します。つまり、この主張はtrueであると仮定します。

iam_project_rulesproject_idが存在する行が存在する可能性がありますnotiam_projectsに表示されません。

ただし、iam_project_rules.project_idiam_projectsへの外部キーである場合、その主張はfalseでなければなりません。

私の分析または仮定のどこにエラーがありますか?

2
Michael Sorens

この IDEF1Xチートシート によると、ダイヤモンドはオプションのiam_projectと0、1、または複数のiam_project_rulesの関係を示しています。

optionaliam_project側にのみ存在できます。これは、iam_project_rulesがすでに「オプション」であるためです(iam_project)。

これは、関係が独立したエンティティ間のものであるため可能です。つまり、両方が存在しなくても存在できます。

独立したエンティティ:識別のためにモデル内の他のエンティティに依存しないエンティティ。
依存エンティティ:モデル内の他のエンティティの存在と識別の両方を依存します。

この意味は:

iam_project_rulesproject_idがnullである行が存在する可能性があります。これは、ルールがプロジェクトから独立していることを意味します。

オプションではない関係が必要な場合は、外部キーにNOT NULL制約を追加する必要があります。

別の方法としては、データモデルをIDEFX1セマンティックに揃え、プライマリキーに外部キーiam_project_ruleを含めることにより、iam_projectproject_idに依存させることもできます。

3
Christophe