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?

More than 1 year has passed since last update.

第1 ~ 第3正規化までのまとめ

Posted at

テーブルとは?

  • 共通点を持つレコードの集合体

正規化とは?

データの冗長性を排除し、一貫性と効率性を保持するためのデータ形式

第一正規形

1つのセルには1つの値の原則を満たせば第一正規形

1つのセルに複数の値を入れることがRDBで認められない理由は、
複数セルを許すことで主キーが各列の値を一意に決定できないためです

(↓第一正規形)

名称未設定ファイル.jpeg

問題点1

  • 主キーを決めることが出来ない
    • 一意のレコードが特定出来ない
    • レコードを特定するには、ユーザーid、名前、子 全ての情報が必要
    • 主キーはその列の一部のため、吉田さんの子はNULLなので一意にはならないので×

問題点2

  • ユーザーと、扶養者の2つのエンティティを含んでいる
    • テーブルの意味やレコードの単位が理解できない

修正後

正規化.drawio (1).png

ユーザーと、子どもで分けました

関数従属性を満たすことが出来ました。
関数従属性とは、どんな関数でもXが決まれば、Yが決まる性質

社員ID社員
社員ID子1
社員ID子2
社員ID子3

第二正規形

第二正規形とは、
部分関数従属を解消して、完全関数従属のみのテーブルを作ること

部分関数従属とは、主キーの一部の列に対して従属関係があること
完全関数従属とは、主キーを構成する全ての列に対して従属関係があること

名称未設定ファイル.drawio (1).png

こちらのテーブルは第二正規形ではありません。
理由は、完全関数従属では無いからです。

こちらのテーブルでは主キーは、食べ物種別コード食べ物idの二つがあります
食べ物種別コードは、食べ物種別に従属しています
主キーの一部の列に対して従属関係があるので、部分関数従属になります

第二正規化すると

名称未設定ファイル.jpeg

第二正規化にする意味

第二正規化する前のテーブルに対して、食べ物は無いですが食べ物種別として、中華を追加しようとしたとします。

しない場合のデメリットとしては、

  • 主キーである食べ物idをNULLにできないので、何かしらのダミー値を登録する必要があります

名称未設定ファイル.jpeg

  • また、想定外のデータを登録してしまう可能性があります
    • {4, 中華}と登録するつもりが、ある特定のレコードだけ{4, China}と登録してしまうかもしれません
    • アプリケーション側でチェックはできるものの、DBに直接挿入されれば対処出来ません

名称未設定ファイル.jpeg

第三正規形

スクリーンショット 2023-05-01 21.39.59.jpg

生産地コードと、生産地にフォーカスを当てます。

仮に、生産地に愛知が増えたとして登録しようとしたとき。
新しく生産地ができただけで実際に生産された食べ物が存在しない場合、主キーである食べ物コード食べ物idは空になるため登録できません

スクリーンショット 2023-05-01 21.52.20.jpg

また、テーブル内には関数従属性が存在します生産地コード生産地)

仮に、生産地が食べ物に対して1:1の場合、

食べ物種別コード、食べ物id生産地コードとなり、

全体としては、

食べ物種別コード、食べ物id生産地コード生産地
の2段階の関数従属が存在します

このような従属性を推移的関数従属性と言い、正規化されていないことになります

第三正規化を行う

正規化.drawio.png

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?