🐈

達人に学ぶDB設計書徹底指南書「第3章」メモ

2024/04/27に公開

達人に学ぶDB設計徹底指南書 第三章の学びになった所をメモ

この記事を書いた人

https://twitter.com/noobmental456

学びになったところ

  • テーブルとは何か?言語化するとある共通点を持ったレコードを集めたもの
  • 主キーとは?テーブルのレコードには必ず唯一無二のキーが存在しなければならない。言い換えると、テーブルには重複行が許されない
  • 複合キーとは、複数列を組み合わせてでしか主キーを作れない場合は、複数の列を組み合わせてできるキー
  • 外部キーとは2つのテーブルの列同士で組み合わせて作られるキーのこと。外部キーに設定したレコードでしか、子テーブルはその列に値を入れられない。子テーブルのレコード範囲を外部キーで制御できる。当然、親テーブルでは子テーブルを気にせずにレコードを変更することができる。親テーブルのレコードが削除された子テーブルは、あわせて削除されるか(カスケードと言う)、SOL文がエラーになる。もっとも外部キーが設定されている場合は子から順に操作するのが良い
  • 一意制約とは、ある列の組について一意性を求めることができる制約である。主キーはテーブルにつき一つしか設定できないのに対して、一意制約は何個でも設定できる
  • CHECK制約はある列の取りうる範囲を制限するための制約
  • 正規化は簡単に言うと、データベースで保持するデータの冗長性を排除し、一貫性と効率性を保持するためのデータ形式
  • 正規化には何段階かレベルがあり、一般的には第1~第5正規形が良く知られている。数字が増えるほど正規化のレベル(次数)が上がっていく。普通は第三正規系まで理解すれば十分
  • 第一正規形の定義は「一つのセルの中には一つの値しかい含まれない」というもの。いずれのセルもスカラ値を満たしていなければならない
  • 一つのセルには複数の値を入れてはならない。セルに複数の値を入れてしまうと、主キーが各列の値を一意にできないため、主キーの意義に反してしまう。常に関数従属性でなければならない
  • 第二正規系とは、主キーと一部の列が部分関係従属になっているのを排除し、完全関数従属にすることである。テーブルを分割することでできる
  • 第二正規化をしないと、誤った情報が登録されていることに気づかない、複数の列からなる複合キーだった場合に一つでも情報がわからなかったら、埋められるハズだった列の値を追加することができないなどがデメリットにある。また、第二正規化はエンティティの実態を正確にテーブルで表現していると言える。
  • 第三正規化は隠れた関係従属つまり推移的関係従属をなくすこと。具体的にはテーブルをさあらに分割する
  • 一対多で正規化を行う場合可逆的な無損失分解を行うことができるが、多対多で正規化を行う場合不可逆な正規化になってしまう。また、業務上のルールも加わるとテーブルだけでは実体を表現できない可能性があるため、この場合はアプリケーション側で制御する必要がある
  • 第四正規化は、キーを複数含む多値従属性を分割して、テーブルの関連を一つにすることである。関連と関連エンティティは一対一に対応させればよい

Discussion