1

次のようなデータがあります:
1: イベント
2: イベント 1
3: イベント 1.1
4: イベント 2
5: イベント 2.2
6: イベント 2.2.1
7: イベント 2.2.1.1
8: イベント 2.2.1.2
9: イベント 2.2 .1.3
10: イベント 2.2.1.3.1
11: イベント 3
12: イベント 4
13: イ​​ベント 4.1

イベント 1、2、3、および 4 はすべて「イベント」の下にネストされ、イベント 1.1 はイベント 1 の下にネストされます。

これをデータベースの同じテーブルに格納するにはどうすればよいですか? ID を含めるフィールドをもう 1 つ用意できますか?

それは次のようになります。

フィールド:
id (イベントの ID)
name (イベントの名前)
ids_to_include (このイベント内で発生したイベント)

この (例の) データが入れ子になっている最大数は、4 レベル (2.2.1.3.1) です。しかし、私の考えでは、歴史のすべてのイベントにはさらに多くのサブイベントがある履歴データを考えているので、ネストは無制限にする必要があります。歴史的なイベントの「タイプ」ごとに新しいテーブルを作成したくありません。むしろ、ネストのない長期的な期間( WW2:1939-1945 など)のテーブルと、必要なだけネストします。

それとも、私はこれを完全に間違った方法で行っていますか? ありがとう。

4

2 に答える 2

1

リレーショナル テーブルに階層データを格納するモデルがいくつかありますが、最もよく使用されるのはnested setsとの 2 つですadjacency list

これらのモデルに対して実行するクエリの種類に応じて、どちらかがより効率的になります。

ではMySQL、隣接リストをクエリするのはやや困難です。これMySQLは、欠落しているがそれでも可能である集合再帰を必要とするためです。

これら 2 つのモデルの比較については、私のブログのこのエントリを参照してください。

于 2012-04-26T14:07:06.793 に答える
0

親要素への foreing-key 参照を指定できます。

Id    Name        ParentId
==========================
 1    Events      null
 2    Event 1     1
 3    Event 1.1   2
 4    Event 2     1
 5    Event 2.2   4
 . . .
于 2012-04-26T14:05:25.383 に答える