正規化:冗長性の排除
メニューを表示するにはスワイプしてください
正規化は、リレーショナルデータベース設計における基礎的な概念であり、冗長性を排除し、データの一貫性を確保することでデータを効率的に整理することを目的としています。正規化を考慮せずにデータベースを設計すると、複数のレコードに情報が重複して保存され、データの更新・挿入・削除時に異常や不整合が発生する可能性があります。正規化の主な目的は、データの冗長性を最小限に抑え、更新異常を回避し、データベースの保守性や検索性を向上させることです。大きな非正規化テーブルを、より小さく関連付けられたテーブルに分割することで、正規化は堅牢でスケーラブルなデータベース構造の実現に寄与します。
123456789101112131415-- A denormalized table with redundant data CREATE TABLE student_courses_denormalized ( student_id INT, student_name VARCHAR(100), student_email VARCHAR(100), course_id INT, course_name VARCHAR(100), enrollment_date DATE, grade CHAR(2) ); -- Example rows with redundancy: -- (1, 'Alice Johnson', 'alice.johnson@example.com', 101, 'Introduction to Mathematics', '2023-09-01', 'A') -- (1, 'Alice Johnson', 'alice.johnson@example.com', 103, 'Computer Science Basics', '2023-09-01', 'B') -- (2, 'Bob Smith', 'bob.smith@example.com', 101, 'Introduction to Mathematics', '2023-09-01', 'B')
student_courses_denormalizedテーブルの冗長性に対処するには、段階的な正規化プロセスを実施します。まず、繰り返し現れるグループや重複情報を特定します。この例では、学生情報とコース情報が各登録ごとに繰り返されています。次に、データをstudents、courses、および学生とコースを関連付けるenrollmentsの3つのテーブルに分割します。各テーブルに主キーを割り当て、外部キーで関係性を構築することで、冗長な情報を排除し、各データを一度だけ保存できるようにします。このプロセスは通常、**第一正規形(1NF)**で繰り返しグループを排除し、**第二正規形(2NF)や第三正規形(3NF)**へと進み、部分的・推移的な依存関係をさらに除去して構造を洗練させていきます。
以下は正規化されたテーブルを作成するためのSQLコードです:
CREATE TABLE students (
student_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100),
date_of_birth DATE
);
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(100),
course_code VARCHAR(20),
credits INT
);
CREATE TABLE enrollments (
enrollment_id INT PRIMARY KEY,
student_id INT,
course_id INT,
enrollment_date DATE,
grade CHAR(2),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
1. 正規化の主な目的は何ですか?
2. どの正規形が繰り返しグループを排除しますか?
3. 正規化はどのようにしてデータの一貫性を維持しますか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください