DBMS - Нормализация базы данных

Здравствуйте, начинающие энтузиасты баз данных! Сегодня мы отправимся в увлекательное путешествие в мир нормализации баз данных. Как ваш доброжелательный邻居-преподаватель информатики, я рад помочь вам освоить этот важный concept в设计中 баз данных. Не волнуйтесь, если вы новички в программировании – мы начнем с азов и постепенно поднимемся!

DBMS - Database Normalization

Введение в нормализацию базы данных

Представьте, что вы организуете свой шкаф. Вы бы просто бросили все свои вещи в одну большую кучу? Конечно нет! Вы бы организовали их по типу, цвету или сезону. Нормализация базы данных очень похожа – это все о том, чтобы организовать данные эффективно и уменьшить избыточность.

Функциональная зависимость

Давайте начнем с основного понятия: функциональная зависимость.

Что такое функциональная зависимость?

Функциональная зависимость (ФЗ) – это отношение между двумя атрибутами в отношении, где один атрибут определяет другой.

Представьте, что у вас есть база данных студентов:

Student_ID Name Age Course
101 Alice 20 Math
102 Bob 21 Physics
103 Charlie 19 Chemistry

Здесь Student_ID функционально определяет Name, Age и Course. Мы записываем это так:

Student_ID → Name, Age, Course

Это означает, что если мы знаем Student_ID, мы можем определить Name, Age и Course студента.

Аксиомы Армстронга

Теперь давайте поговорим о аксиомах Армстронга. Это основные правила для функциональных зависимостей. Представьте их как "законы физики" для отношений в базе данных!

  1. Рефлексивность: Если Y является подмножеством X, то X → Y
  2. Увеличение: Если X → Y, то XZ → YZ
  3. Транзитивность: Если X → Y и Y → Z, то X → Z

Это может показаться сложным, но это просто формальные способы описания логических отношений. Мы увидим, как они применяются по мере продвижения!

Тривиальная функциональная зависимость

Тривиальная функциональная зависимость возникает, когда атрибут правой части является подмножеством левой части. Например:

Student_ID, Name → Student_ID

Это тривиально, потому что зная Student_ID и Name, вы всегда сможете определить Student_ID (он уже там!).

Нормализация

Теперь давайте погрузимся в сердце нашего урока: нормализация. Нормализация – это процесс организации данных для минимизации избыточности и зависимости. Это как наведение порядка в вашей базе данных!

Первая нормальная форма (1NF)

Первая нормальная форма – это базовый уровень нормализации. Чтобы достичь 1NF:

  1. Устраните повторяющиеся группы
  2. Создайте отдельную таблицу для каждого набора связанных данных
  3. Определите каждый набор связанных данных с помощью основного ключа

Давайте рассмотрим пример:

До 1NF:

Order_ID Product Quantity
1 Apple, Banana 2, 3
2 Orange, Grape 1, 4

После 1NF:

Order_ID Product Quantity
1 Apple 2
1 Banana 3
2 Orange 1
2 Grape 4

Смотрите, как мы устранили повторяющиеся группы? Much cleaner!

Вторая нормальная форма (2NF)

Чтобы достичь 2NF, мы должны:

  1. Быть в 1NF
  2. Устранить частичные зависимости

Давайте рассмотрим пример:

Student_ID Course_ID Course_Name Instructor
101 C1 Math Prof. Smith
102 C2 Physics Prof. Johnson

Здесь Course_Name и Instructor зависят от Course_ID, а не от Student_ID. Мы должны разделить это на две таблицы:

Таблица 1: Student_Course

Student_ID Course_ID
101 C1
102 C2

Таблица 2: Course

Course_ID Course_Name Instructor
C1 Math Prof. Smith
C2 Physics Prof. Johnson

Третья нормальная форма (3NF)

Чтобы достичь 3NF, мы должны:

  1. Быть в 2NF
  2. Устранить транзитивные зависимости

Давайте рассмотрим пример:

Employee_ID Department Department_Head
101 Sales John
102 Marketing Sarah

Здесь Department_Head зависит от Department, который зависит от Employee_ID. Мы должны разделить это:

Таблица 1: Employee

Employee_ID Department
101 Sales
102 Marketing

Таблица 2: Department

Department Department_Head
Sales John
Marketing Sarah

Форма BCNF (Boyce-Codd Normal Form)

BCNF – это немного более сильная версия 3NF. Чтобы быть в BCNF:

  1. Быть в 3NF
  2. Для каждой зависимости X → Y, X должен быть super key

Вот пример:

Student Subject Professor
Alice Math Prof. Smith
Bob Physics Prof. Johnson

В этом случае и (Student, Subject) → Professor и Professor → Subject. Чтобы достичь BCNF, мы разделяем это:

Таблица 1: Student_Professor

Student Professor
Alice Prof. Smith
Bob Prof. Johnson

Таблица 2: Professor_Subject

Professor Subject
Prof. Smith Math
Prof. Johnson Physics

И вот мы и добрались до basics нормализации базы данных. Помните, хотя нормализация важна, иногда денormalization может быть полезна для производительности. Все дело в том, чтобы найти правильный баланс для ваших конкретных потребностей.

Надеюсь, это руководство было полезным. Помните, что практика делает мастера! Попробуйте нормализовать некоторые образцовые базы данных самостоятельно. Если у вас есть вопросы, не стесняйтесь задавать их. Счастливого нормирования!

Credits: Image by storyset