DB: テーブル内でIDを分けてカテゴリ分類する
今回は一つのテーブル内に中項目のカテゴリ的なフィールドがある際にIDでデータを整理する方法をまとめます。
サンプルテーブル
今回はNovel, Business, ComicというCategoryフィールドを持つBookテーブルをサンプルに考えてみます。
Bookテーブルは以下のように定義します。
CREATE TABLE Book (
id INT PRIMARY KEY,
title VARCHAR(100),
category TEXT -- Categoryテーブルを用意してもOKです
);
IDでカテゴリ分類
ではカテゴリごとにIDを分けてデータを作成してみましょう。今回は以下のようにIDを割り振りました。
- Novel: 1001~
- Business: 2001~
- Comic: 3001~
INSERT INTO Item (id, title, category) VALUES
(1001,'disregard for humanity', 'Novel'),
(1002,'Heart', 'Novel'),
(1003,'snow country', 'Novel'),
(1004,'I am a cat', 'Novel'),
(2001,'Atomic Habits', 'Business'),
(2002,'Psychology of Money', 'Business'),
(2003,'Deep Work', 'Business'),
(2004,'Brack Swan', 'Business'),
(3001,'NARUTO', 'Comic'),
(3002,'ONE PIECE', 'Comic'),
(3003,'Dragon Ball', 'Comic'),
(3004,'Slum Dunk', 'Comic');
ID分類するメリット
IDをカテゴリごとに分けるメリットは以下が挙げられます。
- 識別しやすい
- 検索しやすい
- データ管理が楽
- 可読性が上がる
識別しやすい
カテゴリごとにIDを分けることで、データのIDを見ただけでどのカテゴリに所属しているか分かりやすくなります。
ただこれだけで言えばCategoryフィールドを見ればわかるのでそこまで大きなメリットではないかもしれません。
検索しやすい
IDでカテゴリ分類がされていると、以下のようなクエリでもIDからカテゴリをソートすることができます。
-- NovelカテゴリのアイテムをIDから取得
SELECT * FROM Book WHERE id BETWEEN 1000 AND 1999;
-- BusinessカテゴリのアイテムをIDから推測して取得
SELECT * FROM Book WHERE id LIKE '2%';
ただし、これもCategoryでソートをかければ同じ操作が可能なため、メリットとしては弱いです。
データ管理が楽
IDでカテゴリを大別していると、新しいデータを追加するときにIDでそのカテゴリにまとめることもできるようになります。
IDでカテゴリ分類していないと、データ追加を重ねるうちにいろんなカテゴリがいろんなIDで散見されるようになり、データ管理が大変になってきます。そのため、これは大きなメリットの一つだと思います。
可読性が上がる
これも大きなメリットです。シンプルに読みやすいです。どんなコードも読みやすいに越したことはないと思っています。
カテゴリ分類する際の注意
分類は適切なスケールで行いましょう。Bookテーブルで例えると、これがもし自身の本棚のデータであれば1000単位の分類はおそらく十分か多いくらいでしょう。
ですが、これがもし図書館やAmazonの本全てのデータベースとして使うのであれば、1000単位では足りない可能性が高いです。この場合、分類から溢れたデータは結局そのカテゴリから離れたIDをつけるしかなくなり、かえってデータの管理が複雑になりかねません。
なので、IDでカテゴリを分類する際には、今後のスケーラビリティも踏まえて適切なレンジで設定しましょう。
まとめ
今回はIDでカテゴリを分類する方法をまとめました。
これからもこういったちょっとしたテクニックなんかを学んだときは、このような形でまとめてみようと思います。
Discussion