はじめに
データベース設計はシステム開発の重要な部分であり,データの正確な管理と効率的なアクセスを可能にします.この記事では,1対1・1対多・多対多のリレーションシップを具体的な例を通じて解説します.
この記事の目的は,これらのリレーションシップの基本概念と実際のテーブル設計方法を理解してもらうことです.
概要
今回はQiitaのような記事投稿サイトのようなシステムを題材にしています.
1対1のリレーションシップ
1対1のリレーションシップは,一つのテーブルのレコードが他のテーブルの一つのレコードに対応する場合に使われます.
例えば,ユーザ情報とユーザプロファイルの関係です.
ユーザ情報テーブル:
UserID | UserName | Password | |
---|---|---|---|
1 | Alice | alice@example.com | aaa |
2 | Bob | bob@example.com | bbb |
1対1の関係のデータは基本的に同じテーブル内にまとめられています.
UserIDに対して名前やメールアドレス,パスワードが1対1のデータになっています.
1対多のリレーションシップ
1対多のリレーションシップは,一つのテーブルのレコードが他のテーブルの複数のレコードに対応する場合に使われます.
例えば,ユーザと記事の関係です.
記事情報テーブル:
ArticleID | fk_UserID | Title | 内容 |
---|---|---|---|
1 | 1 | タイトル1 | aaa |
2 | 1 | タイトル2 | bbb |
3 | 2 | タイトル3 | ccc |
4 | 1 | タイトル4 | ddd |
1対多の関係のデータは基本的に親子の関係になります.
親(ユーザ)に対して子(記事情報)のデータがある状態です.
この時親テーブルがユーザ情報テーブルになりますので,ユーザ情報テーブルの一意なキー(UserID)を外部キー(fk_UserID)として持っています.
多対多のリレーションシップ
多対多のリレーションシップは,複数のテーブルのレコードが互いに複数のレコードに対応する場合に使われます.
例えば,ユーザとお気に入り記事の関係です.
これを実現するために,中間テーブルを使用します.
お気に入り登録テーブル:
fk_ArticleID | fk_UserID |
---|---|
1 | 2 |
2 | 2 |
3 | 1 |
4 | 2 |
多対多の関係のデータは基本的に中間テーブルを使って実現します.
これによって例えばユーザがお気に入り登録した記事を検索する場合はUserIDをキーに、
記事をお気に入りに設定したユーザ数を検索する場合はArticleIDをキーに検索すれば取得ができます。