データベースのエンティティリレーションシップダイアグラムを生成すると、次のようなことが発生しました。
この図(IDEF1X表記)は、次のことを示しています。
db_id
という独自の一意のプライマリキーがあります。iam_projects.db_id
はiam_project_rules
(project_id
フィールド)の外部キーなので、接続線になります。iam_projects.db_id
はiam_project_rules
の主キーのnotの一部です(つまり、点線のスタイルです)。iam_projects.db_id
はiam_project_rules
に0回以上現れることがあります(したがって、接続線の右端にある黒丸)。さて、これが私の質問です。表記を理解すると、接続線の左端にあるひし形が左側を「1」から「0または1」に変更します。つまり、この主張はtrueであると仮定します。
iam_project_rules
にproject_id
が存在する行が存在する可能性がありますnotはiam_projects
に表示されません。
ただし、iam_project_rules.project_id
がiam_projects
への外部キーである場合、その主張はfalseでなければなりません。
私の分析または仮定のどこにエラーがありますか?
この IDEF1Xチートシート によると、ダイヤモンドはオプションのiam_project
と0、1、または複数のiam_project_rules
の関係を示しています。
optionalはiam_project
側にのみ存在できます。これは、iam_project_rules
がすでに「オプション」であるためです(iam_project
)。
これは、関係が独立したエンティティ間のものであるため可能です。つまり、両方が存在しなくても存在できます。
独立したエンティティ:識別のためにモデル内の他のエンティティに依存しないエンティティ。
依存エンティティ:モデル内の他のエンティティの存在と識別の両方を依存します。
この意味は:
iam_project_rules
にproject_id
がnullである行が存在する可能性があります。これは、ルールがプロジェクトから独立していることを意味します。
オプションではない関係が必要な場合は、外部キーにNOT NULL
制約を追加する必要があります。
別の方法としては、データモデルをIDEFX1セマンティックに揃え、プライマリキーに外部キーiam_project_rule
を含めることにより、iam_project
をproject_id
に依存させることもできます。