0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0076(2024/03/24)データベース設計における関数従属の種類と具体例

Last updated at Posted at 2025-03-24

データベース設計における関数従属の種類と具体例

データベース設計では、「関数従属」という概念が重要です。関数従属はデータの冗長性を避け、正規化を適切に行うために必要な知識です。この記事では、「完全関数従属」「部分関数従属」「推移的完全関数従属」を具体例とともに解説します。


🔹 関数従属とは?

関数従属(Functional Dependency)とは、「ある属性(または属性の集合)が決まれば、他の属性が一意に決まる」関係のことを指します。以下では、その具体的な種類を解説します。


🔹 完全関数従属(Full Functional Dependency)

完全関数従属とは、「複合キーのすべての属性を用いて初めて、他の属性が一意に決定できる状態」を言います。

具体例

次のテーブルを考えます。

受講者番号 講義番号 成績
001 A01 80
001 A02 85
002 A01 75
  • この場合、「受講者番号」と「講義番号」の複合キーにより「成績」が決定されます。
  • 「受講者番号」だけや「講義番号」だけでは成績を特定できず、両方が必要です。
  • このとき、「成績」は複合キーに完全関数従属しています。

🔹 部分関数従属(Partial Functional Dependency)

部分関数従属とは、「複合キーの一部だけで他の属性が決定できる状態」を言います。これは好ましくない従属関係であり、正規化によって解消すべき対象です。

具体例

次のテーブルを考えます。

社員番号 部署コード 部署名
1001 D01 営業部
1002 D01 営業部
1003 D02 開発部
  • 上記のテーブルは、複合キーとして「社員番号」「部署コード」を想定しています。
  • しかし、「部署名」は「部署コード」だけで特定可能です。
  • つまり、「部署名」は複合キーの一部(部署コード)だけに従属しているため、部分関数従属となります。

部分関数従属の問題点

  • データの重複が発生し、更新の不整合が生じる可能性があります。
  • これは第2正規形で解消する必要があります(別テーブルに分離)。

🔹 推移的完全関数従属(Transitive Functional Dependency)

推移的完全関数従属とは、「主キーに依存する非キー属性が、さらに別の非キー属性を決定する」という間接的な関数従属関係を指します。これも正規化によって解消する必要があります。

具体例

次のテーブルを考えます。

社員番号 社員名 部署コード 部署名
1001 佐藤 D01 営業部
1002 鈴木 D01 営業部
1003 田中 D02 開発部
  • 「社員番号」が主キーであり、「部署コード」が社員番号に関数従属しています。
  • しかし「部署名」は「部署コード」に依存しているため、「社員番号」→「部署コード」→「部署名」という推移的関係が生じます。
  • この推移的完全関数従属は第3正規形で解消されるべきです。

🔹 正規化による解消方法

上記の問題を解決するには、正規化を行います。

  • 第1正規形:全ての属性が単一の値を持つ。
  • 第2正規形:部分関数従属を解消(部分的に従属している属性を別テーブルへ)。
  • 第3正規形:推移的完全関数従属を解消(間接的な従属を別テーブルへ)。

正規化後のテーブル例(第3正規形)

社員テーブル

社員番号 社員名 部署コード
1001 佐藤 D01
1002 鈴木 D01

部署テーブル

部署コード 部署名
D01 営業部
D02 開発部

🔹 まとめ

データベース設計では関数従属を理解し、適切な正規化を実施することで冗長性や不整合を防ぎ、整合性の高いデータベースを構築できます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?