web-dev-qa-db-ja.com

他の2つの関係のテーブル(3方向の関係?)

1つのテーブルが他の2つのテーブルと関係があるが、その中のレコードは1つのテーブルとしか関係がないという奇妙な状況に遭遇しました。明確にするために、attributevisitvisit_actionのテーブルがあります。 visitvisit_actionの親です。1回の訪問で、ユーザーは複数のアクションを実行できます。訪問とアクションの両方に、namevalueで構成される属性があります。 1つのattributevisitまたはvisit_actionのいずれかに関連付けることができますが、同時に両方に関連付けることはできません。 1回の訪問には複数の属性を含めることができ、アクションも同様です。これらの関係をデータベースに保持するにはどうすればよいですか?

オプション1visit_attributevisit_action_attributeのような2つの接続テーブルを作成します。どちらもattributeとの関係があり、1つは関係があります。 visitに1つとvisit_actionに1つ。このソリューションで私が抱えている問題は、属性がvisitvisit_actionの両方に同時に結び付けられる可能性があることであり、それは望ましくありません。 two connecting tables

オプション2id_visitおよびid_visit_actionを含む列をattributeテーブルに直接作成します。 attributeは多くの訪問やアクションに関連付けることができないため、適切に思えますが、1回の訪問と1つのアクションに同時に拘束される可能性があるという問題があります。 attributeテーブルの1つの列が常にNULLid_visitまたはid_visit_actionのいずれか)になるのは残念です。 connections in attribute table

1
nass

3番目のオプションがあります:

それぞれにname列とvalue列を含むテーブルvisit_attributevisit_action_attributeを作成します(そしてattributeテーブルを完全に削除します)。

これにより、特定の属性がvisitvisit_actionの両方にリンクされる可能性がなくなり、NULL値のid列は必要ありません。

1
RDFozz