CodeGym /コース /SQL SELF /既存データベースの正規形適合性分析

既存データベースの正規形適合性分析

SQL SELF
レベル 26, レッスン 2
使用可能

データベースを正規形に適合しているか分析するってことは、テーブルの構造やテーブル同士の関係、属性間の依存関係をチェックするってことだよ。分析のメインの目的は、正規化違反を見つけて、それがパフォーマンスや整合性、データの扱いやすさにどう影響してるか評価すること。

簡単に言うと、これは会計監査みたいなもん。お金が適当に置かれてないか、ちゃんと必要な費目ごとに分けられてるかチェックする感じ。

データベース分析の実践的アプローチ

どんなデータベースでも、まずは正規形ごとに3つの基本的な質問をするところから始めるよ。

例えば、倉庫のデータベースがあって、こんな構造のテーブルがあるとしよう:

product_id product_name supplier_name supplier_phone stock_quantity
1 クギ ストロイコンプレクト +12301112233 150
2 ネジ クレペジョプロ +12306667788 200
3 ナット ストロイコンプレクト +12301112233 100

このテーブルが正規形に合ってるかどうやってチェックする?

1NF(第1正規形)を思い出してみよう:

  • 各セルには1つの値だけが入ってる。
  • 同じデータ型の重複カラムがない。

この例だと1NF違反はないね。各セルはアトミックな値だし。つまり、このテーブルは1NFになってる。やったね!次に進もう。

2NF(第2正規形)は:

  • 1NFになっている。
  • すべての非キー属性が完全に主キー全体に依存している(部分的な依存がない)。

このテーブルだと、supplier_nameとsupplier_phoneはproduct_id(主キー)だけに依存してる。でも、同じサプライヤーの名前と電話番号が複数行に重複してるのが分かるよね。

2NFにするには、テーブルを2つに分けるのがいい:

Productsテーブル:

product_id product_name supplier_id stock_quantity
1 クギ 1 150
2 ネジ 2 200
3 ナット 1 100

Suppliersテーブル:

supplier_id supplier_name supplier_phone
1 ストロイコンプレクト +78901112233
2 クレペジョプロ +78906667788

これでサプライヤーは1回だけ出てくるし、テーブル同士は外部キーsupplier_idでつながってる。

3NF(第3正規形)は:

  • 2NFになっている。
  • すべての非キー属性が主キーだけに依存していて、他の非キー属性には依存していない。

正規化したProductsとSuppliersテーブルには推移的な依存関係はない。つまり、3NFになってる!

実践課題

例えば、元の「大学」テーブルがあるとしよう:

student_id student_name course_name professor_name professor_email
101 Otto Lin スウガク Peter Pen pen@university.com
102 Anna Song ブツリ Alex Sid sid@university.com
103 Otto Lin ブツリ Alex Sid sid@university.com
  1. このテーブルが正規形に合ってるかチェックしよう。
  2. 必要なら1NF、2NF、3NFにしてみよう。

解答

STEP 1: 1NFチェック

このテーブルはすでに1NF:各セルは1つの値だけ。

STEP 2: 2NFチェック

2NF違反がある:教授(名前とメール)の情報が重複してる。これを別テーブルに分けよう:

Studentsテーブル:

student_id student_name
101 Otto Lin
102 Anna Song

Coursesテーブル:

course_id course_name professor_id
1 スウガク 1
2 ブツリ 2

Professorsテーブル:

professor_id professor_name professor_email
1 Peter Pen pen@university.com
2 Alex Sid sid@university.com

Enrollmentsテーブル:

enrollment_id student_id course_id
1 101 1
2 102 2
3 103 2

STEP 3: 3NFチェック

新しい構造には推移的な依存関係がない。テーブルは3NFになってる!

実践的なアドバイス

  1. 必要以上に理想を追い求めない。 過剰な正規化はクエリを複雑にしちゃうこともある。
  2. 分析は探偵気分で! 重複や余計な依存、他の「異常」を探してみよう。
  3. パフォーマンスも忘れずに。 正規化はデータのきれいさと処理速度のバランスが大事。

これでデータベースの問題を見つけて解決できるようになったから、どんな規模のDBでも「監査」できるはず。覚えておいて:いいデータベースは機能的なだけじゃなくて、きれい(正規化されてる)なプロジェクトでもあるんだ。

2
タスク
SQL SELF, レベル 26, レッスン 2
ロック未解除
テーブルを第三正規形(3NF)に正規化しよう
テーブルを第三正規形(3NF)に正規化しよう
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION