ユーザーとワークグループという2つのテーブルという単純な状況を考えてみましょう。外部キー循環参照ジレンマ
- ユーザーの電子メールアドレスは、ユーザーテーブルの主キーです。
- Workgroup_idは、WorkGroupテーブルの主キーです。
- ユーザーは複数のワークグループを作成できます。
- ユーザーは、わずか1つのワークグループに含めることができます。この特定のシナリオの下では
私はは、ワークグループを作成したユーザーを追跡する必要があります。私はすでにやっていること
:
- は、ユーザーが所属するワークグループかを知るために、ユーザーテーブルにworkgroup_idという名前の変数を持っています。これは、ワークグループテーブルのworkgroup_idへの外部キーです。
- ワークグループテーブルにuser_emailという名前の変数を設定して、どのユーザーがワークグループを作成したかを追跡します。これは、users表のuser_emailに対する外部キーです。
私はここに直面しています問題は、これは、ユーザーとワークグループテーブルの間循環参照につながるということです。プログラミングのどこでも循環参照は大きな問題ではありません。
どうすれば解決できますか?ここで欠けているより良いデザインパターンはありますか?
EDIT:かどうかについては 「循環参照がある大きななしなし」か、概念的にはないかもしれませんが、そこに実装が異なるデータベースで非普遍的であることから、彼らはまだ有効な問題が残っています。これはORMを使用している場合に悪化します.ORMを使用すると、データベースのORMサポートにより、使用できるデータベース設計の種類が制限されます。
これはどのように循環しているのかわかりません。ワークグループを作成するユーザーとワークグループ内のユーザーは関連しません。識別できない関係と識別できない関係を調べることができます。https://stackoverflow.com/questions/762937/whats-the-difference-between-identifying-and-non-identifying-relationships – dragmosh
@dragmoshその方法では、まだ鶏と卵の問題があります。作成者の電子メールが必要なため、最初のワークグループを作成することはできません。また、ワークグループIDが必要なため、最初のユーザーを作成することはできません。 – Barmar
このような設計上の問題にはあまり差がないかもしれませんが、同じ製品ではないので、mysqlとsql serverの両方でタグ付けしたくないでしょう。 – Xedni