Приведение БД к 3НФ

Основные принципы 3НФ

  1. 1НФ: Все столбцы атомарны. Пример: id_dog, name_dog вместо объединённого поля.
  2. 2НФ: Зависимость от всего первичного ключа. Пример: cost, status_order зависят от id_ord.
  3. 3НФ: Устранение транзитивных зависимостей. Пример: poroda зависит от id_por, а не от category.

Пошаговая инструкция

Шаг 1: Анализ исходной таблицы

Пример:

Категория | Порода | Кличка | Окрас | Возраст | Стоимость | Дата продажи | Статус доставки | Клиент

Проблемы:

  • Повторяющиеся группы (например, "Персидская" → "Кошка")
  • Транзитивные зависимости (порода → категория, кличка → порода)

Шаг 2: Разделение на сущности

Таблица категорий:
CREATE TABLE category (
  id_cat INT PRIMARY KEY,
  category VARCHAR(80) NOT NULL
);
Таблица пород:
CREATE TABLE poroda (
  id_por INT PRIMARY KEY,
  poroda VARCHAR(80) NOT NULL,
  id_cat INT NOT NULL,
  FOREIGN KEY (id_cat) REFERENCES category(id_cat)
);

SQL-запросы

Создание таблиц

-- Категории
CREATE TABLE category (
  id_cat INT PRIMARY KEY,
  category VARCHAR(80) NOT NULL
);

-- Породы
CREATE TABLE poroda (
  id_por INT PRIMARY KEY,
  poroda VARCHAR(80) NOT NULL,
  id_cat INT NOT NULL,
  FOREIGN KEY (id_cat) REFERENCES category(id_cat)
);

Заполнение данных

-- Категории
INSERT INTO category (id_cat, category) VALUES
(1, 'Собака'),
(2, 'Кошка'),
(3, 'Птица');

-- Породы
INSERT INTO poroda (id_por, poroda, id_cat) VALUES
(1, 'Лабрадор', 1),
(2, 'Овчарка', 1),
(3, 'Такса', 1),
(4, 'Персидская', 2),
(5, 'Британская', 2),
(6, 'Попугай', 3),
(7, 'Канарейка', 3);

Чек-лист для проверки 3НФ

  • ✅ У каждой таблицы есть первичный ключ
  • ✅ Все связи через внешние ключи
  • ✅ Атомарные значения в столбцах
  • ✅ Нет транзитивных зависимостей
  • ✅ Целостность данных (UNIQUE, ENUM)

Частые ошибки

Ошибка Решение
Отсутствие первичного ключа Добавьте PRIMARY KEY
Несовпадение типов в связях Проверьте типы данных (например, id_por должен быть INT везде)
Транзитивная зависимость Разделите таблицы (category, poroda, dog)

Советы для экзамена

  1. Начните с анализа исходной таблицы
  2. Создайте сущности: категории → породы → питомцы → заказы → клиенты
  3. Используйте внешние ключи для связей
  4. Проверьте, что все неключевые атрибуты зависят только от первичного ключа
  5. Тестирование: вставьте данные из Приложения А
Создатель сайта не утверждает,
что данная шпаргалка действительно верная
Получить помощь