特定の子オブジェクトが異なる型の複数の親を持つ場合があります。たとえば、オブジェクトは、 、、またはオブジェクトfoo
の 1 つ以上の子である場合があります。さらに、1 つ以上の 、、またはオブジェクトの子であるオブジェクトもあります。これをSQLでモデル化する適切な方法は何ですか?a
b
c
bar
a
b
c
A) すべての関係の単一のテーブル:
relationship_tbl
parent_id parent_type child_id child_type
--------- ----------- -------- ----------
1 a 5 foo
2 a 6 foo
3 c 7 bar
4 b 7 bar
B) 各親タイプの一意のテーブル:
a_child_tbl
parent_id child_id child_type
--------- -------- ----------
1 5 foo
2 6 foo
b_child_tbl
parent_id child_id child_type
--------- -------- ----------
4 7 bar
c_child_tbl
parent_id child_id child_type
--------- -------- ----------
3 7 bar
C) 各子タイプの一意のテーブル:
foo_parent_tbl
child_id parent_id parent_type
--------- ----------- -----------
5 1 a
6 2 a
bar_parent_tbl
child_id parent_id parent_type
--------- ----------- -----------
7 3 c
7 4 b
D) 組み合わせごとに固有の表
a_foo_tbl
parent_id child_id
--------- --------
1 5
2 6
b_bar_tbl
parent_id child_id
--------- --------
4 7
c_bar_tbl
parent_id child_id
--------- --------
3 7
E) まだ検討していない他の戦略
Find all the parents of child 7
私には、 A がクエリを実行して、またはのような質問に答えるのが最も簡単なように思えますがFind all the children of parent 4
、基本的に親子関係の一般的なテーブルを作成しないというアドバイスを読みました。
誰かがこれを行うための最良の方法とその理由に光を当てることができますか? テーブルの行数が数百万行を超えることはないと考えて間違いありません。