SQLでの1対多(1:n)リレーションシップの実装

URL
date
Oct 20, 2024
slug
implementing-a-1-n-relationship-in-sql
status
Published
tags
MySQL
1:n
Relationships
summary
SQLでの1対多(1:n)リレーションシップの実装
type
Post

SQLでの1対多(1:n)リレーションシップの実装

データベース設計では、複数のテーブル間でリレーションシップを適切に定義することが、効率的なクエリとデータの一貫性を保つために重要です。この記事では、特に 1対多(1:n)リレーションシップ に焦点を当て、従業員、チーム、建物間の関係をどのように設計・実装するかを具体的に説明します。

1. 1対多リレーションシップとは?

1対多リレーションシップ では、1つのエンティティが複数の関連するエンティティを持ちます。今回の例では、以下のリレーションシップを構築します:
  • チームと従業員: 1つのチームには複数の従業員が所属しますが、各従業員は1つのチームにしか所属しません。
  • 建物とチーム: 1つの建物には複数のチームが配置されますが、各チームは1つの建物にしか属しません。
この関係を反映するために、各従業員は所属するチームの team_id を持ち、各チームは配置されている建物の building_id を持つことになります。

2. テーブル定義

2.1 company_buildings テーブル

最初に、会社の建物情報を保存する company_buildings テーブルを作成します。このテーブルには、建物IDと建物名が含まれます。

2.2 teams テーブル

次に、チーム情報を保存する teams テーブルを作成します。ここでは、各チームが1つの建物に属するため、building_id を外部キーとして設定します。建物が削除された場合、関連するチームの building_idNULL に設定するため、ON DELETE SET NULL を使用します。

2.3 employees テーブル

従業員の情報を保存する employees テーブルも作成します。ここでは、各従業員が1つのチームに属するため、team_id を外部キーとして設定します。チームが削除された場合、関連する従業員の team_idNULL に設定されるように ON DELETE SET NULL を使用します。
もしここで、「各従業員が1つ以上のチームに属する」になる場合は、多対多n:m 関係になる。
 

2.4 intranet_accounts テーブル

従業員とイントラネットアカウントの1対1の関係も設定します。イントラネットアカウントは各従業員に1つ割り当てられ、従業員が削除された場合に対応するアカウントも自動的に削除されるように ON DELETE CASCADE を使用します。

3. データ挿入の例

次に、これらのテーブルにデータを挿入してみます。建物、チーム、従業員、そしてイントラネットアカウントの順でデータを挿入していきます。

3.1 company_buildings テーブルへのデータ挿入

3.2 teams テーブルへのデータ挿入

3.3 employees テーブルへのデータ挿入

3.4 intranet_accounts テーブルへのデータ挿入

4. まとめ

この記事では、1対多(1:n)リレーションシップの基本的な考え方と、SQLでの実装方法を説明しました。具体的には、従業員、チーム、建物の間に1対多の関係を設定し、外部キー制約を使ってデータの整合性を保ちながら、関連データの削除や更新が正しく行われるようにしました。
1対多リレーションシップは、データベース設計において非常に一般的であり、今回のように ON DELETE SET NULLON DELETE CASCADE を使って削除時の動作を制御することが、データの整合性を保つ上で重要です。次は、多対多のリレーションシップを同様に実装し、さらに複雑なデータ間の関係を管理してみましょう。


© EndlessDev2016 2021 - 2025