Руководство по SQL. Первая нормальная форма (1 НФ).

Первая нормальная форма (далее – 1НФ)определяет ряд базовых правил организации базы данных (далее – БД):

  • Определяет необходимые данные, которые становятся колонками таблицы. Размещает связанные по смыслу данные в таблице.
  • Гарантирует, что в БД нет повторяющихся групп данных.
  • Гарантирует, что каждая таблица содержит первичный ключ (primary Key).

Первое правило 1 НФ

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

Например, мы размещаем колонки, которые относятся к специализации в таблице specialties, данные, которые относятся к разработчикам в таблице developers и т.д.


Второе правило 1 НФ

Мы должны гарантировать, что в БД нет повторяющихся групп данных. Предположим, у нас есть следующая таблица:

+–+——————————–+—————–+———–+
| id | name | specialty | salary |
+–+——————————–+—————–+———–+

Если мы начнём заполнять данную таблицу данными одного разработчика, который имеет несколько специальностей, это будет выглядеть следующим образом:

+–+——————————–+—————–+———–+
| id | name | specialty | salary |
+–+——————————–+—————–+———–+
| 1 | Eugene Suleimanov | Java | 2000 |
| 1 | Eugene Suleimanov | C++ | 2000 |
| 1 | Eugene Suleimanov | Javascript | 2000 |
+–+——————————–+—————–+———–+

Но, 1 НФ требует, чтобы у нас не было повторяющихся групп данных.

Поэтому, мы должны разбить таблицу на две:

  • developers

    
    CREATE TABLE developers(
           ID   INT              NOT NULL,
           NAME VARCHAR (20)     NOT NULL,
           SALARY  INT           NOT NULL,
           PRIMARY KEY (ID)
    );
    
    
  • specialties

    
    CREATE TABLE specialties(
           ID   INT                 NOT NULL,
           DEVELOPER_ID             NOT NULL,
           SPECIALTY  VARCHAR(100)  NOT NULL,
           PRIMARY KEY (ID)
    );
    
    

Таблица specialties будет иметь следующий вид:

+–+——————————–+—————–+
| id |developer_id | specialty |
+–+——————————–+—————–+
| 10 | 1 | Java |
| 11 | 1 | C++ |
| 12 | 1 | Javascript |
+–+——————————–+—————–+


Третье правило 1НФ

Третье првило 1НФ гласит, что каждая создаваемая нами таблица должна содержать первичный ключ (primary key).