Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 正規化:冗長性の排除 | セクション
データベース設計パターン

book正規化:冗長性の排除

メニューを表示するにはスワイプしてください

正規化は、リレーショナルデータベース設計における基礎的な概念であり、冗長性を排除し、データの一貫性を確保することでデータを効率的に整理することを目的としています。正規化を考慮せずにデータベースを設計すると、複数のレコードに情報が重複して保存され、データの更新・挿入・削除時に異常や不整合が発生する可能性があります。正規化の主な目的は、データの冗長性を最小限に抑え、更新異常を回避し、データベースの保守性や検索性を向上させることです。大きな非正規化テーブルを、より小さく関連付けられたテーブルに分割することで、正規化は堅牢でスケーラブルなデータベース構造の実現に寄与します。

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')
copy

student_courses_denormalizedテーブルの冗長性に対処するには、段階的な正規化プロセスを実施します。まず、繰り返し現れるグループや重複情報を特定します。この例では、学生情報コース情報が各登録ごとに繰り返されています。次に、データをstudentscourses、および学生とコースを関連付ける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. 正規化はどのようにしてデータの一貫性を維持しますか?

question mark

正規化の主な目的は何ですか?

正しい答えを選んでください

question mark

どの正規形が繰り返しグループを排除しますか?

正しい答えを選んでください

question mark

正規化はどのようにしてデータの一貫性を維持しますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  5

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  5
some-alt