1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ポートフォリオのテーブル設計を見直してみた

Last updated at Posted at 2021-09-12

まえがき

2章 Naive Trees(素朴な木) を参考に自分のポートフォリオを見直してみました。

RDBにおけるデータ構造

RDBにおけるデータ構造には大きく分けて4つあります。
①隣接リストモデル(ナイーブツリー)
②経路列挙モデル
③閉包テーブルモデル
④入れ子集合モデル

素朴な木とは?

素朴な木とは、①の隣接リストモデルに該当します。

隣接リストモデルとは、最も単純な構造で以下のようなテーブルとなります。
特徴は、それぞれの要素が自分の親だけを知っていることです。

id name parent_id
1 地名 NULL
2 日本 1
3 アメリカ 1
4 東京 2
5 大阪 2
6 渋谷 4
7 吹田 5
8 品川 4
9 ニューヨーク 3
10 ナイアガラ 9
11 ロサンゼルス 3

tree_table.drawio.png

メリット、デメリット

  • メリット

    • 単純な構造で理解しやすい
  • デメリット

    • 階層が決まっていない場合の取得が困難
      (日本に関する子孫ツリーの数を取得しようとするのが困難になる)

現状の構造

コメントをスレッド形式で表示する機能にて、
「コメント」、「コメントに対する返信」も両方Commentsテーブルに格納されています。

comment_id content reply_comment
1 朝ごはんを食べました NULL
2 早起きしました NULL
3 何食べたの? 1
4 今日は出かけます NULL
5 僕も食べました! 1
(reply_commentはどのコメントに対する返信かを表しています)

今回のパターンでは、
階層は2階層で固定
の構造なので、デメリットの部分を意識する必要はなく隣接リストモデルでも問題ないのかなと思います。

スクリーンショット 2021-09-12 12.58.57.png

改善するなら

今後、改善としてスレッド内でさらにどのコメントに対するコメントかを細かく分類したい場合は、隣接リストモデルでは不十分だと考えられます。

その際は、閉包テーブルモデルを採用しテーブルを二つに分ける必要が出てきます。

参考文献

The Cusp Of Helix
Railsでツリー構造(階層構造)をもったカテゴリを隣接リストモデルで実装する

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?