部分関数従属とは?初心者向けにわかりやすく解説するデータベースの基本
生徒
「先生、データベースを勉強していたら『部分関数従属』という言葉が出てきました。これはどういう意味なんですか?」
先生
「部分関数従属(ブブンカンスウジュウゾク)というのは、複合キーを持つ表で、そのキーの一部だけで他の列が決まってしまう関係のことだよ。」
生徒
「複合キーの一部だけで決まるっていうのが、いまいちイメージできません。」
先生
「例えば、注文表で『注文番号』と『商品番号』の2つをキーにしている場合、『商品名』は商品番号だけで決まるよね。これが部分関数従属なんだ。」
生徒
「なるほど!キー全体じゃなくて一部の列で決まると部分関数従属になるんですね。」
1. 部分関数従属(ブブンカンスウジュウゾク)とは?
部分関数従属とは、データベースの正規化(セイキカ)における重要な概念のひとつです。英語では「Partial Functional Dependency(パーシャルファンクショナルディペンデンシー)」と呼ばれます。
複合キー(フクゴウキー)を持つ表において、キーの一部の列だけで他の列が決まってしまう状態を指します。このような場合、データが冗長になり、更新時に矛盾が起きやすくなります。
2. 部分関数従属の具体例
例えば次のような「注文表」を考えます。
注文番号 | 商品番号 | 商品名 | 単価 | 数量
001 | A01 | ノートPC | 100000 | 1
001 | A02 | マウス | 2000 | 2
002 | A01 | ノートPC | 100000 | 1
この表では「注文番号」と「商品番号」の2つがキーになっています。しかし「商品名」や「単価」は商品番号だけで決まります。つまり、キー全体ではなく「商品番号」のみで決定できてしまうため、これは部分関数従属です。
このままの設計だと、同じ商品についての情報が何度も繰り返されてしまい、データの冗長性(ジョウチョウセイ)が高くなります。
3. 部分関数従属を放置すると起きる問題
- 同じ商品名や単価を複数の行に入力する必要があるため、入力ミスが発生しやすい。
- 商品の単価を変更するとき、すべての行を修正しなければならず、更新の手間が増える。
- 冗長なデータにより、データベースの容量が無駄に増える。
これらの問題はデータの整合性(セイゴウセイ)を損ない、業務システムに大きな影響を与える可能性があります。
4. 部分関数従属の解消方法
部分関数従属を解消するには、表を分割して正規化を行います。具体的には第2正規形(ダイニセイキケイ)に変換します。
先ほどの「注文表」を分割すると、次のようになります。
【商品表】
商品番号 | 商品名 | 単価
A01 | ノートPC | 100000
A02 | マウス | 2000
【注文詳細表】
注文番号 | 商品番号 | 数量
001 | A01 | 1
001 | A02 | 2
002 | A01 | 1
このように分割することで、商品に関する情報は商品表で一元管理でき、更新や検索が効率的になります。
5. 完全関数従属との違い
部分関数従属と対比される概念に「完全関数従属(カンゼンカンスウジュウゾク)」があります。完全関数従属とは、複合キーのすべてを使わないと値が決まらない関係のことです。
例えば「注文番号」と「商品番号」の両方をキーとした場合、数量はこの2つがそろって初めて決まります。これが完全関数従属の例です。
6. 部分関数従属の雑学
部分関数従属という考え方は、データベース理論を提唱したエドガー・F・コッドが正規化の過程を整理する中で広まりました。正規化の第2段階として位置づけられ、データの矛盾や重複を防ぐために重要な役割を果たします。
初心者にとっては難しく感じるかもしれませんが、実際には「商品番号を見れば商品名が分かる」というような日常的なルールと同じです。こうした身近な例をイメージすると理解しやすくなります。