---
# System prepended metadata

title: Chapter11-3　「正規化」
tags: [基本情報技術]

---

# Chapter11-3　「正規化」
## 6/1 
###### tags:`基本情報技術`



さつき：
* データに矛盾や重複が生じないよう、表を最適化する。
    * 非正規系→第一正規系→第二正規系→第三正規系
* 非正規系
    * 繰り返し部分を持っている。
* 第一正規系
    * 繰り返しを除く
* 第二正規系
    * 関数従属
        * 主キーが定まれば、列の値が一意に定まる関係
    * 部分関数従属
        * 複合キーの一部の項目だけで、列の値が一意に定まる関係
* [DBを正規化するということ](https://qiita.com/yukihirasawa1206/items/c2dedcc51c01c1bd8ccc)
    > ユーザーが存在しない都道府県はデータとして登録できない
    > 正規化後のテーブルであれば都道府県のデータは「都道府県テーブル」に切り出されているのでユーザーの存在に関係なくデータの登録ができます
    * 第一正規系...スカラ値の原則：一つのセルには値は一つでなければならないという原則

うーん...むずかし。。

* 過去問
    * 問１：ふむ。OK
    * 問２：OK!



にわ：
- 読み込み
    * データの正規化：データに矛盾や重複が生じないよう表を最適化すること。
    * 整理していく段取り
        * 非正規形
            * 繰り返し部分があり、各レコードの長さがバラバラ。
            * ex)1つの受注番号に2商品ある場合と、１商品しかない場合、など。受注番号でまとめてると商品情報の部分は繰り返しになるので、レコードの長さはバラバラになる。
        * 第１正規形
            * 非正規形の表から繰り返し部分を取り除いたもの。
            * 取り除いたものは別の独立したレコードとして挿入する。
            * 上の例だと、同じ注文番号で複数商品分のレコードが作られることになる。
        * 第２正規形
            * 関数従属：主キーが決まれば列の値が一意に決まる関係
            * 部分関数従属：複合キーの一部の項目だけで列の値が一意に決まる関係（複数ある主キーの一部に対して関数従属である）
            * 第２正規形は、部分関数従属している列を取り出した形。＝第２正規形の表は、上の例だと1つの受注に関して「受注表（受注情報）」「商品表（商品情報）」「受注明細表（受注と商品の紐付け）」に分ける　的な
        * 第３正規形
            * 主キー以外の列に関数従属した列を切り出した形
            * 上の例だと、受注情報・商品情報・受注と商品の紐付け　の他に、顧客情報があるが、顧客情報は元の受注表の主キーである受注番号に紐づくものではないのでここを切り出す、といった感じのこと。
    * →こうやって正規化していくと適切なデータが作られる。DB設計的な。
- 過去問
    * 問１：お。。なるほど。矛盾、重複しないようにするのを「冗長性を排除」っていうのか・・・
    * 問２：ウかエで迷った、頭ではわかった気でも正規化するの難しいな・・・具体的にダミーで表作ってみた方がわかりそう
        * ざっくりだけど、関数従属が連鎖しないように１個ずつ切り出せってことか〜



ちさと：
* 正規化は段階的におこなわれる
    * 非正規形
        * 正規化されておらず、繰り返す項目がある
    * 第１正規形
        * 繰り返しを除いたもの
    * 第２正規形
        * 部分関数従属している列を切り出したもの
        * 例）主キー（受注No）→ 受注した日付、顧客コード、顧客名称が決まる
        * ↑これが受注表というひとつの表になる
        * こういう感じで複数の表に切り出してく
    * 第３正規形
        * 主キー以外の列に関数従属しているのを切り出したもの
        * 例）先ほどの主キー（受注No）ではなく、顧客コードをキーとして、顧客名称を決める

* 関数従属と部分関数従属
    * 主キーに対して、その項目がどんな関係かを表す
    * 例）主キー（社員番号）が決まる　→ 名前、部署が決まる
    * この関係を「関数従属」という
    * 主キーのいち部分に対して、関数従属する場合は「部分関数従属」という
* 過去問
    * 問１：ふむふむ…日本語ってむずい
    * 問２：主キーとどれが関数従属する関係なのかパッとわからん…