skillup

技術ブログ

Database

第二、第三の正規化&ER図&Check制約

投稿日:2016年7月22日 更新日:

前回第一正規化を話したので、第二、第三に進んでいきます。

第二正規化とは?

  • 主キーに対してすべての列が関数従属していること。この状態を完全関数従属という。
  • 正規化されていないテーブルとは例えばマスタの値そのものが入っているようなケース。
  • 正規化のメリットとしてはデータの不整合が起こらないこと
  • 概念としては現実世界の実体間にある階層の差を反映する手段であること
  • 戻すときには結合(JOIN)を用いること。戻せる性質を可逆性という。逆に言えば戻せないときには正規化が失敗している。

第三正規化とは?

  • 主キー以外のマスタなどの値にたいしても従属性を持たせること。
  • このようにテーブル内部に存在する段階的な従属関係を、推移的関数従属という。
  • 一般的な正規化はこの第三正規化までをすることが多い。

正規化のメリット

  • 更新時の不都合・不整合を排除すること
  • 正規化は従属性(キーと値の1対1対応)を見抜くことで可能になる。
  • 正規形は常に非正規形に戻せる。この性質を無損失分解という。

ER図

実際の業務ではかなり小規模なアプリでもテーブルが2桁になることはめずらしくありません。中規模なもので数十、ちょっと大きなものになると数百となるでしょう。このようにテーブルが増えたときにテーブル同士の関連をみるときに、ER図があると視覚的にテーブル同士の関連をすぐに把握することができます。

正規化に関しては一件当たり前のことをいっていますが、関数従属しているかどうかは複雑なテーブルになってくるとあいまいになることは珍しくありません。

特にキーにidを使うのではなく、コードなどを入れる場合、ユーザーが自由にいれるので複雑になってきます。ここら辺は関数従属性を1つ1つ確かめながらテーブル分割をやっていきたいところですね・・・

本日のSQLネタ Check制約

check制約について。

自分はあまり使ったことがなかったんですが、テーブルのレコードに制約を付けたいときに使います。

SQLパズル第一問より

ある年度の会計開始日と終了日のテーブルを作るさい、制約を付けます。

例えばn年度の場合その年の10/1~次年度の9/30になります。そのためのテーブルの定義にcheckを使います。

constraint チェック名 check( チェック内容 ) です。

ただしMySQLではサポートされていません・・・

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

MySQL.sockファイルに関して

朝出社してテストサーバーを見るといきなりサーバーが動いていないという事態が発生。 MySQLを起動しようとすると

なるメッセージがでて …

no image

O/Rマッパー iciqlについて

以前、このブログでも紹介したO/Rマッパーのiciqlについて、使い方や問題点がある程度わかったので書いておきます。 Contents1 インストール2 自動生成3 注意点3.1 Date型のインポー …

no image

DBの基礎 テーブルとは

CSSを学習したあとはデータベースの学習などを。 参考図書:「達人に学ぶDB設計指南書」基本的にはこれを読んでいきます。が、現状よくわからないところは飛ばしていきます・・・ Contents1 テーブ …

no image

サブクエリ 分析関数の代替案として

今回は分析関数系のネタです。 以前にも分析関数を少し学習しましたがMySQLにはないので、サブクエリを使い書くことになります。 下記のような入出金講座があるとします。 Accounts prc_dat …

no image

CakePHPでの数字カンマ区切り&PHP&MySQL曜日の出力

今回は主に時間やお金の表示など、出力に関するネタです。 Contents1 Cakeでのカンマ区切り1.1 単純なカンマ区切り 例1,0001.2 \をつけるケース 例 \1,0001.3 円をつける …