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

HAVING句について

本日はHAVINGについて。 かろうじて用法はしっており、たまに使うこともありますが、あまりしっかり理解しているとはいえない状況ですので、掘り下げてみようと思います。 WHEREとは違い、抽出した結果 …

no image

正規化のデメリット

Contents1 正規化のデメリット2 本日のSQL 正規化のデメリット 正規化についていろいろ書いてきましたが、メリットもあればデメリットもあります。 メリットとしては データの不整合が起きにくい …

no image

SQL 集計関数の利用

先日同様、ある程度複雑な問題のSQLに関して。出典はSQL実践入門。 問題 下記のようなテーブル(テーブル名)で より古い年のデータが存在しない場合 NULL 直近の年のデータより売り上げが伸びた場合 …

no image

MySQLでtext型が大量にあるもののリストア 

MySQLでのリストアについて。 先日実務でtext型のカラムが複数あるテーブルを読もうとしたら下記エラーがでてこけました。

なにやら …

no image

CASE式のすすめ その3

本日もCASE式です。 下記のようなテーブル(studentclub)があるとします。 std_id | club_id | club_name | main_club_flg —&#82 …

アーカイブ