DBスペシャリスト試験の頻出分野のひとつに、「関数従属」と「正規形」があります。初めて学ぶと少し抽象的に感じるかもしれませんが、データベース設計の基礎となる大切な概念です。
今回はこの2つのテーマを、例を交えながらわかりやすく解説していきます。
関数従属とは?
関数従属とは、ある項目(列)の値が決まると、別の項目の値も一意に決まる関係のことです。
具体例:
例えば、社員テーブルにおいて「社員番号」が主キーである場合、「社員番号」から以下のような情報が一意に決まります。
- 社員番号 → 氏名
- 社員番号 → 電話番号
- 社員番号 → 出身地
このように、**社員番号 → {氏名, 電話番号, 出身地}**という関係が成り立つのが関数従属です。
関数従属の種類
部分関数従属
「候補キーの一部」によって他の項目の値が決まってしまう関係のことを部分関数従属といいます。
例えば、複合キー(売上番号+商品番号)を持つ売上テーブルにおいて、売上番号だけで「売上日」や「会員情報」が決まる場合、これは部分関数従属となります。
推移的関数従属
推移的関数従属とは、ある項目が間接的に他の項目を決定する関係です。
例:
- 社員番号 → 支社番号
- 支社番号 → 支社名
この場合、「社員番号 → 支社名」も成り立ちます。これが推移的関数従属です。
関数従属の推論則(覚えておきたいルール)
名前 | 内容 |
---|---|
推移率 | X → Y、Y → Z なら X → Z |
反射率 | Y ⊆ X なら X → Y |
増加率 | X → Y なら XZ → YZ |
合併率 | X → Y、X → Z なら X → {Y, Z} |
これらのルールを理解しておくことで、関数従属の整理や正規化時の分割判断がしやすくなります。
正規化とは?
正規化とは、テーブルの冗長性を排除し、データの整合性を保つためにテーブルを分割・整理する作業です。
正規化が完了した状態を「正規形」と呼びます。
正規形の段階(6段階)
- 第1正規形(1NF)
- 第2正規形(2NF)
- 第3正規形(3NF)
- ボイス・コッド正規形(BCNF)
- 第4正規形(4NF)
- 第5正規形(5NF)
試験では主に第1〜第3正規形までが出題対象です。
情報無損失分解とは?
情報無損失分解とは、正規化しても元のデータに戻せる性質のことです。
第1〜第3正規形まではこの性質が保たれます。
一方、情報損失分解は、正規化後に元の情報を完全に再構成できない状態を指します。
正規化の例題
以下のような売上情報を含むテーブルがあるとします:
売上番号, 売上日, 会員番号, 会員氏名, 商品番号1, 商品名1, 金額1, 商品番号2, 商品名2, 金額2
第1正規形(1NF)
繰り返し項目を分割し、行の構造を整えます。
売上番号, 売上日, 会員番号, 会員氏名, 商品番号, 商品名, 金額
→ 各商品を1行ずつに分けることで、表の構造が正規形になります。
第2正規形(2NF)
部分関数従属を排除するため、データを以下のように分割します。
- 売上番号 → 売上日, 会員番号, 会員氏名
- 商品番号 → 商品名, 金額
売上番号, 商品番号
売上番号, 売上日, 会員番号, 会員氏名
商品番号, 商品名, 金額
第3正規形(3NF)
推移的関数従属を排除します。たとえば、「会員氏名」は「会員番号」から決まるので、以下のようにさらに分割します。
売上番号, 商品番号
売上番号, 売上日, 会員番号
商品番号, 商品名, 金額
会員番号, 会員氏名
おわりに
正規化の目的は、重複データの排除とデータの整合性確保です。関数従属を理解すれば、どこを分割すべきかが明確になります。
DBスペシャリスト試験では、特に「関数従属の識別」と「第1〜第3正規形の分割」がよく出題されるため、例題と一緒にしっかりと理解しておきましょう!
コメント