Втора нормална форма (2NF): определение, правила и примери

Втора нормална форма (2NF) — определение, правила и примери за правилна нормализация на бази данни. Практични стъпки, чести грешки и решения.

Автор: Leandro Alegsa

Втората нормална форма (2NF) е свойство на релационен модел, по-конкретно на таблици, което е критерий за нормализация на базата данни. За да бъде таблица в 2NF, тя трябва първо да е в първа нормална форма (1NF) и след това да не съдържа частични зависимости — т.е. никаква неключова (непървична) колона не трябва да зависи само от част от композитен (съставен) първичен ключ.

Основни правила и определения

  • 1NF (изискване): таблицата трябва да има атомарни стойности и да няма повтарящи се групи.
  • Композитен (съставен) ключ: първичният ключ може да се състои от една или повече колони. Когато ключът е само една колона, таблицата, ако е в 1NF, практически удовлетворява изискванията за 2NF, защото няма „части“ от ключа.
  • Частична зависимост: ситуация, при която някоя неключова колона зависи само от част от композитния ключ, а не от целия ключ. Това нарушава 2NF.
  • 2NF: всички неключови колони трябва да зависят от целия първичен ключ (от всички негови колони), а не само от част от него.

Как да разпознаете частична зависимост

  • Идентифицирайте първичния ключ. Ако той е съставен от n колони, помислете дали някоя неключова колона може да се определи само от някоя подсекция (подмножество) на тези n колони.
  • Ако такава колона съществува, имате частична зависимост и таблицата не е в 2NF.
  • Пример за частична зависимост: Ако ключът е (A, B), а колона C зависи само от A (C ← A) — това е частична зависимост.

Пример: таблица за записване на студенти в предмети

Имаме таблица Enrollment със следните колони:

  • StudentID (част от първичния ключ)
  • CourseID (част от първичния ключ)
  • StudentName
  • CourseName
  • Instructor
  • Grade

Първичният ключ е (StudentID, CourseID). Някои зависимости:

  • StudentName зависи само от StudentID (частична зависимост)
  • CourseName и Instructor зависят само от CourseID (частична зависимост)
  • Grade зависи от целия ключ (StudentID, CourseID) — правилно

Тази таблица не е в 2NF заради частичните зависимости. Корекцията е да я разложим:

  • Students(StudentID, StudentName, други атрибути за студент)
  • Courses(CourseID, CourseName, Instructor, др.)
  • Enrollment(StudentID, CourseID, Grade) — връзка много към много

Стъпки за декомпозиция към 2NF

  1. Установете дали първичният ключ е композитен.
  2. Създайте отделни таблици за групите атрибути, които зависят само от част от композитния ключ (т.е. за всяка частична зависимост).
  3. Запазете таблица, чийто ключ е целият композитен ключ, за атрибутите, които действително зависят от целия ключ.
  4. Проверете, че няма загуба на данни и че връзките между новите таблици запазват семантиката (чрез външни ключове).

Примерен SQL (демонстрация на разпад)

 -- Оригинална (не в 2NF) CREATE TABLE Enrollment (   StudentID INT,   CourseID INT,   StudentName VARCHAR(100),   CourseName VARCHAR(100),   Instructor VARCHAR(100),   Grade CHAR(2),   PRIMARY KEY (StudentID, CourseID) );  -- След нормализация към 2NF CREATE TABLE Students (   StudentID INT PRIMARY KEY,   StudentName VARCHAR(100) );  CREATE TABLE Courses (   CourseID INT PRIMARY KEY,   CourseName VARCHAR(100),   Instructor VARCHAR(100) );  CREATE TABLE Enrollment (   StudentID INT,   CourseID INT,   Grade CHAR(2),   PRIMARY KEY (StudentID, CourseID),   FOREIGN KEY (StudentID) REFERENCES Students(StudentID),   FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) ); 

Ползи от 2NF

  • Намаляване на излишните данни (redundancy).
  • Премахване на аномалии при актуализация, изтриване и вмъкване.
  • По-ясна структура и по-добра поддръжка на данните.

Ограничения и следващи стъпки

  • 2NF не решава транзитивните зависимости (когато неключова колона зависи от друга неключова колона). За това се използва Трета нормална форма (3NF).
  • Понякога напълно нормализираните схеми водят до много таблици и по-сложни заявки; при практическа работа трябва да се балансира между нормализация и производителност.

Често срещани грешки

  • Пропускане на проверка за частични зависимости при композитни ключове.
  • Неправилно определяне кои атрибути са „ключови“ (prime) и кои са „неключови“.
  • Смесване на проблема на 2NF с този на 3NF — те са различни нива и решават различни видове зависимости.

Кратко обобщение: Таблица е в 2NF, ако е в 1NF и няма частични зависимости на неключови атрибути спрямо част от композитен първичен ключ. Ако откриете такива зависимости, разложете таблицата в няколко по-малки таблици, така че всяка неключова колона да зависи от целия ключ на таблицата, в която се намира.



обискирам
AlegsaOnline.com - 2020 / 2025 - License CC3