Приветствую Вас на сайте Info-Comp.ru! Сегодня мы с Вами поговорим о первой нормальной форме базы данных, в частности Вы узнаете, какие требования предъявляются к таблицам, чтобы база данных находилась в первой нормальной форме, и для наглядности мы, конечно же, рассмотрим пример.
Перед тем как переходить к процессу приведения таблиц базы данных к первой нормальной форме, необходимо чтобы эти таблицы соблюдали базовые принципы реляционной теории, подробнее об этом мы говорили в материале, который посвящен нулевой нормальной форме (UNF) или, как ее еще называют, – ненормализованной форме.
После того как таблицы приведены к правильному табличному виду, мы можем начинать процесс нормализации.
Требования первой нормальной формы (1NF)
Требование первой нормальной формы (1NF) очень простое и оно заключается в том, чтобы таблицы соответствовали реляционной модели данных и соблюдали определённые реляционные принципы.
Таким образом, чтобы база данных находилась в 1 нормальной форме, необходимо чтобы ее таблицы соблюдали следующие реляционные принципы:
- В таблице не должно быть дублирующих строк
- В каждой ячейке таблицы хранится атомарное значение (одно не составное значение)
- В столбце хранятся данные одного типа
- Отсутствуют массивы и списки в любом виде
Заметка! Если Вас интересует язык SQL, то рекомендую почитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.
Пример приведения таблицы к первой нормальной форме
Следующая таблица не находится даже в первой нормальной форме, так как у нас есть дублирующие строки (John Smith), а в некоторых ячейках хранятся списки значений (каждый номер телефона — это одно значение).
Таблица сотрудников в ненормализованном виде.
Сотрудник | Контакт |
Иванов И.И. | 123-456-789, 987-654-321 |
Сергеев С.С. | Рабочий телефон 555-666-777, Домашний телефон 777-888-999 |
John Smith | 123-456-789 |
John Smith | 123-456-789 |
Чтобы привести эту таблицу к первой нормальной форме, необходимо удалить дублирующие строки, в ячейках хранить один номер телефона, а не список, а тип телефона (домашний или рабочий) вынести в отдельный столбец, так как столбцы хранят структурную информацию.
Таблица сотрудников в первой нормальной форме.
Сотрудник | Телефон | Тип телефона |
Иванов И.И. | 123-456-789 | |
Иванов И.И. | 987-654-321 | |
Сергеев С.С. | 555-666-777 | Рабочий телефон |
Сергеев С.С. | 777-888-999 | Домашний телефон |
John Smith | 123-456-789 |
Таким образом, главное правило первой нормальной формы звучит следующим образом
Строки, столбцы и ячейки в таблицах необходимо использовать строго по назначению.
- Назначение строк – хранить данные
- Назначение столбцов – хранить структурную информацию
- Назначение ячеек – хранить атомарное значение
Т.е. если ячейка таблицы по реляционной теории должна хранить одно атомарное значение, не нужно записывать в ячейку какой-то список значений или составное значение. Также не нужно создавать строки, которые уже есть в таблице и хранить в столбце значения разных типов данных.
Заметка! Как создать таблицу в PostgreSQL с помощью pgAdmin 4.
На основе всего вышеизложенного можно сделать следующий вывод.
Если таблица создана с соблюдением всех реляционных принципов, значит, она уже находится в первой нормальной форме, таким образом, по сути абсолютно все реляционные таблицы находятся в первой нормальной форме. Если таблица создана без учета реляционных принципов, значит эта таблица не является реляционной.
После того как мы привели таблицы базы данных к первой нормальной форме, мы можем переходить к приведению таблиц до второй нормальной формы (2NF). Описание, требования и пример приведения таблиц до второй нормальной формы мы рассмотрим в следующем материале.
На сегодня это все, надеюсь, материал был Вам полезен, пока!
Почему она стала !й нормальной формой , если в ней так же есть дублирующие строки? (Сергеев С.С.) — «Следующая таблица не находится даже в первой нормальной форме, так как у нас есть дублирующие строки (John Smith), …»???
Тоесть, таблица может иметь дублирующие значения в столбце? А в двух, трех ит.д. не может?
Автору большое спасибо за материал, написано очень понятным языком! Только тоже непонятно, почему дублирующие строки остались, но таблица теперь в NF1
Таблица в 1NF потому что нет полных дублей.
Здесь под дублями имеются ввиду абсолютно идентичные строки.
Например Иванов: хоть и есть 2 записи, но они с разными телефонами.
Разве не корректнее было бы сделать два столбца «Домашний номер» и «Рабочий номер» ? Если нет, то мне не совсем понятно почему
Нет, не корректней. Я, кстати, тоже сперва подумал насчет столбцов «Домашний номер» и «Рабочий номер». Суть вот в чем: номеров у контакта может быть любое множество, например 10. И в вашем варианте каждый раз при попадании в базу контактов с большим числом номеров, чем выделено столбцов, надо будет изменать таблицу — добавлять столбцы. Со всеми вытекающими.
А разве поле сотрудник не должно быть разбито на три: фамилия, имя и отчество? Поле содержит не атомарное значение.
В реальной жизни есть куча полей, которые не атомарны (по вашему определению) например «адрес», да по большому счету любая дата не атомарна — день, месяц, год.