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?

達人に学ぶDB設計 徹底指南書(第3章)

Posted at

目的

「達人に学ぶ DB 設計 徹底指南書」を読んで学んだことをアウトプットするために記事を投稿する。
今回は第 3 章についての内容をまとめる。

テーブルとは

テーブル
共通点を持ったレコードの集合体
テーブル≠表ではない

テーブルの構成要素

行と列
行:レコード
列:カラム、もしくは属性
キー(key)
ある特定のデータを引き出すための鍵
主キー(primary key)
一意にレコードを識別するための属性
外部キー(foreign key)
二つのテーブルの間の列同士で設定するための属性
テーブルに対して一種の「制約(constraint)」を課す役割も持つ=参照整合制制約

制約の種類

NOT NULL制約
NULL(空欄)を禁止すること
テーブル定義において、列は可能な限りNOT NULL制約を付加することが望ましい
一意制約
ある列の組について一意性を求める
CHECK制約
ある列の取りうる値の範囲を制限する
ex.)年齢の場合、20 ~ 65までの整数のみ許容など

テーブルの列と名前

ルール 1:名前に使える文字集合

  • 半角アルファベット
  • 半角数字
  • アンダーバー(_)

テーブルや列の名前に日本語は絶対ダメ

ルール 2:最初はアルファベット

良い例
champions_2024、nine9
悪い例
2024_champions、9nine

ルール 3:名前は重複してはならない

同じ名前を持つテーブル、同じ名前を持つ列は存在してはいけない(もし作ろうとしても、エラーになる)。

正規化とは

冗長性や非一貫性の問題を解決するために考案された方法論
※冗長性:一つの情報が複数のテーブルに存在して無駄なデータ領域と面倒な更新処理を発生させてしまう、などの状態
※非一貫性:冗長性により、更新処理のタイムラグによってデータの不整合が発生したり、そもそもデータを登録することができないようなテーブルを作ってしまう、などの状態

正規化は大きく 5〜6 段階に分類される

第1正規形

一つのセルの中には一つの値しか含まない=スカラ値の原則

なぜの 1 つのセルに複数の値を入れてはダメなのか?

セルに複数の値を許せば、主キーが各列の値を一意に決定できないから
→ 主キーの定義に反する

正規化とは、テーブルのすべての列が、関数従属性を満たすように整理していくこと

第 2 正規形

部分関数従属(主キーの一部に従属した状態)を解消し、完全関数従属(主キーすべてに従属した状態)のみのテーブルを作ること

第 3 正規形

テーブル内部に存在する推移的関数従属(段階的な従属関係)を解消し、それぞれの関数従属の関係を独立させる

ボイスーコッド正規形

非キーからキーへの関数従属をなくした状態

第 4 正規形

独立な多値従属性が複数存在するテーブルを分割する

第 5 正規形

第4正規形の発展版

正規化のポイント

1. 正規化とは更新時の不都合/不整合を排除するために行なう
2. 正規化は従属性を見抜くことで可能になる
3. 正規形はいつでも非正規形に戻せる

感想

  • 従属制の排除=正規化の第一歩
  • 正規化を行うことで冗長性や非一貫性を排除できるが、その分テーブルが増えることになるためパフォーマンスの低下につながるのが悩ましい...
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?