今日の問題
オリジナルアプリ開発のday2です。今日は要件定義の作成、DB設計をやっていました。Twitterのようなフォロー機能を作る時どのようなDB設計を作ればいいのかわからず、DB設計について調べました。今回はDBについてまとめます。
DBは3種類ある
テックキャンプではRDB(リレーショナルデータベース)についてしか学びませんでしたが、DBは主に3種類あるそうです。
1、階層型データベース
1つの頂点(親)が存在し、その下に複数の子供、孫が結び付けられている構造です。常に親とこの関係は「親1人対子1人」か「親1人対子多」の関係しか持てません。
メリット
・「各ノード(親や子、孫などを示している丸1つ1つのこと)へのルートが決まっているので、処理速度が早くなる」というもの。
デメリット
・データの追加や削除をする場合、変更が膨大になるため、柔軟性に欠けること
・子が複数の親を持つことができないため、不自然なデータが出来上がる
2、ネットワーク型データベース
1の階層型データベースのデメリットである「子供が複数の親を持つことができない」というデメリットを解消したものになります。どのようなDBかというと子が複数の親を持つことのでき、ネットワーク(網目)のような構造を持つDBです。
メリット
階層型DBと比べ、構造が簡潔になる。
デメリット
各ノードが複雑に絡み合うため、一度データ構造決めると変更が難しい
3、リレーショナルデータベース(RDB)
現行、最優のDB構造です。上記1と2のDBはサーバー同士がインターネットで繋げられておらず、メインフレームと呼ばれる中央集権的な大型処理機が主流だった時代に利用されていたものらしいです。1970年(コッド博士)にRDBの論文が公表され、現在ではDBの8割近くがRDBを採用しているという話もあります(正確なところは不明)。構造としてはレコードとカラムで構成されているテーブルを複数つなげることでデータベースを構築するものです。
メリット
データの構造の変更や追加が楽
デメリット
・プログラムが複雑化しやすい
・処理が遅くなる
まとめ
以上3つのDB構造を見てきました。コメントに対するリプライ機能導入にあたって、複数のDBの構造を組み合わせた方がいいんじゃな以下とか悩んでいましたが、どうやらテックキャンプで学んだRDBの方法で十分対応できるようです。
参考文献