0
1

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.

DB設計時のカテゴリのジレンマ【考察】

Last updated at Posted at 2021-04-27
1 / 18

【カテゴリのジレンマとは】

カテゴリのジレンマとは、あるものに関連付ける「カテゴリ」が存在する。
その「カテゴリ」をユーザが追加でき、「カテゴリ」がネストする(階層化できる)場合の
DB設計をした際に生じる問題。


今回のテーマ

今回は、

食べ物テーブル と カテゴリテーブル

の カテゴリのジレンマ について考える。


DBイメージ

食べ物テーブル と カテゴリテーブル 
のDBイメージは以下の通りである。

01.png


カテゴリテーブル登録イメージ

カテゴリテーブル 
の登録イメージは以下の通りである。

02.png


食べ物テーブル登録イメージ

食べ物テーブル
の登録イメージは以下の通りである。

03.png


【考察①】とりあえず表のようにDBを作る

DBを表のように作ります。

04.png


カテゴリ登録を行うと・・・

カテゴリ登録を行うとなぜか「カテゴリテーブル」のようにDB登録されます!!
(1つずつ登録しているので当たり前)

001.png


え?一括登録すればいいって?

カテゴリ登録を一括で行ったとしても
正規化されていないDBは見るに堪えない・・・。
(毎回「和食」を登録するのか・・・)

06.png


【考察②】カテゴリ毎にテーブルを分ける

カテゴリを正規化して、DBを表のように作ります。

07.png


食べ物登録を行うと・・・

何を選んでもカテゴリが全表示されるバグが発生。
(カテゴリテーブル間の関係が決まっていないため)

08.png


カテゴリテーブル間に関係を作ると・・・

ねじれ過ぎてて読み解きにくい・・・
(もう少しシンプルに設計したい・・・)

09.png


【考察③】カテゴリまとめテーブルを作る

正規化したカテゴリテーブルに
カテゴリをまとめる「カテゴリまとめテーブル」を追加する。

10.png


デジャブ!?・・・

DBを表の通り作成したときと同じことが起こります。
また、一括登録では途中で登録をやめた際に
そこまでのデータが残らないのがネックです。

11.png


【考察④】カテゴリに親子関係を作る

カテゴリに親子関係を追加して、DBを表のように作ります。

12.png


カテゴリ登録を行うと・・・

親カテゴリIDで制御されているので、
不要なカテゴリは表示されません!!

13.png


食べ物登録を行うと・・・

イメージ通りカテゴリが表示されます。
しかし、1つのテーブルで3テーブル分管理
しているようなものなのでDBの肥大化が怖い・・・

14.png


最後に

以上、DB設計時のカテゴリのジレンマでした!

カテゴリを考えるだけで
こんなに発想が出てくるなんて
面白いですよね。

もし、より効率的にカテゴリ管理をする方法を
ご存知の方がいましたらコメントお願いします。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?