0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы разберем вторую нормальную форму реляционной модели, а также два ее требования.</p>
1
<p>В этом уроке мы разберем вторую нормальную форму реляционной модели, а также два ее требования.</p>
2
<p>Будем работать с таблицей, которая уже соответствует первой нормальной форме:</p>
2
<p>Будем работать с таблицей, которая уже соответствует первой нормальной форме:</p>
3
<p><strong>order_items</strong></p>
3
<p><strong>order_items</strong></p>
4
<h2>Вторая нормальная форма</h2>
4
<h2>Вторая нормальная форма</h2>
5
<p>Вторая нормальная форма включает в себя два требования:</p>
5
<p>Вторая нормальная форма включает в себя два требования:</p>
6
<ul><li>Таблица должна быть в первой нормальной форме</li>
6
<ul><li>Таблица должна быть в первой нормальной форме</li>
7
<li>Все неключевые атрибуты таблицы должны зависеть от первичного ключа</li>
7
<li>Все неключевые атрибуты таблицы должны зависеть от первичного ключа</li>
8
</ul><p>Первое требование уже выполнено, так как в таблице:</p>
8
</ul><p>Первое требование уже выполнено, так как в таблице:</p>
9
<ul><li>Каждая ячейка хранит только одно значение</li>
9
<ul><li>Каждая ячейка хранит только одно значение</li>
10
<li>Все данные в одной колонке одного типа</li>
10
<li>Все данные в одной колонке одного типа</li>
11
<li>Каждая запись отличается от других записей</li>
11
<li>Каждая запись отличается от других записей</li>
12
</ul><p>Поэтому разберем подробнее второе требование.</p>
12
</ul><p>Поэтому разберем подробнее второе требование.</p>
13
<h2>Зависимость от первичного ключа</h2>
13
<h2>Зависимость от первичного ключа</h2>
14
<p>Зависимость атрибута от первичного ключа - это ситуация, при которой ключ имеет значение, зависимое от конкретного контекста. Предположим, что в таблице, Сергей - это всегда один и тот же человек, который делает заказ на разные адреса. В таком случае видно, что заказ привязан к конкретному пользователю. Это и есть зависимость от первичного ключа. А вот имя пользователя и его фамилия с заказом никак не связано. Оно имеет отношение к самому пользователю.</p>
14
<p>Зависимость атрибута от первичного ключа - это ситуация, при которой ключ имеет значение, зависимое от конкретного контекста. Предположим, что в таблице, Сергей - это всегда один и тот же человек, который делает заказ на разные адреса. В таком случае видно, что заказ привязан к конкретному пользователю. Это и есть зависимость от первичного ключа. А вот имя пользователя и его фамилия с заказом никак не связано. Оно имеет отношение к самому пользователю.</p>
15
<p>Согласно второй форме, атрибуты<em>first_name</em>и<em>last_name</em>необходимо вынести в свою таблицу, которая будет отвечать за пользователей:</p>
15
<p>Согласно второй форме, атрибуты<em>first_name</em>и<em>last_name</em>необходимо вынести в свою таблицу, которая будет отвечать за пользователей:</p>
16
<p><strong>users</strong></p>
16
<p><strong>users</strong></p>
17
<p>В этой таблице всего три записи, потому что у нас три уникальных пользователя. Каждому из этих пользователей присваивается первичный ключ.</p>
17
<p>В этой таблице всего три записи, потому что у нас три уникальных пользователя. Каждому из этих пользователей присваивается первичный ключ.</p>
18
<p>Теперь нужно связать таблицу<em>order_items</em>с таблицей<em>users</em>. Делается это через указание первичных ключей в зависимых таблицах:</p>
18
<p>Теперь нужно связать таблицу<em>order_items</em>с таблицей<em>users</em>. Делается это через указание первичных ключей в зависимых таблицах:</p>
19
<p><strong>order_items</strong></p>
19
<p><strong>order_items</strong></p>
20
<p>Мы удалили<em>first_name</em>,<em>last_name</em>и добавили<em>user_id</em>. В этом поле хранятся идентификаторы пользователей, а само поле называется<strong>внешним</strong>или<strong>вторичным</strong>ключом.</p>
20
<p>Мы удалили<em>first_name</em>,<em>last_name</em>и добавили<em>user_id</em>. В этом поле хранятся идентификаторы пользователей, а само поле называется<strong>внешним</strong>или<strong>вторичным</strong>ключом.</p>
21
<p>Такую же операцию нужно произвести и с товаром. Вынесем<em>item</em>в свою таблицу:</p>
21
<p>Такую же операцию нужно произвести и с товаром. Вынесем<em>item</em>в свою таблицу:</p>
22
<p><strong>goods</strong></p>
22
<p><strong>goods</strong></p>
23
<p>Теперь свяжем эти данные с таблицей<em>order_items</em>:</p>
23
<p>Теперь свяжем эти данные с таблицей<em>order_items</em>:</p>
24
<p><strong>order_items</strong></p>
24
<p><strong>order_items</strong></p>
25
<p>Другой пример внешнего ключа в таблице покупателя и города можно схематично показать так:</p>
25
<p>Другой пример внешнего ключа в таблице покупателя и города можно схематично показать так:</p>
26
<p>Внешний ключ - это не ссылка. Таблицы существуют сами по себе, и во внешнем ключе указывается конкретное значение, которое должно совпадать с первичным ключом другой таблицы.</p>
26
<p>Внешний ключ - это не ссылка. Таблицы существуют сами по себе, и во внешнем ключе указывается конкретное значение, которое должно совпадать с первичным ключом другой таблицы.</p>
27
<p>Так выглядит синтаксис определения вторичного ключа:</p>
27
<p>Так выглядит синтаксис определения вторичного ключа:</p>
28
<p>REFERENCES <название таблицы, на которую смотрим> (<список полей в той таблице, которым соответствуем>)</p>
28
<p>REFERENCES <название таблицы, на которую смотрим> (<список полей в той таблице, которым соответствуем>)</p>
29
<p>Благодаря вторичному ключу поддерживаются гарантии корректности данных. Например, невозможно удалить запись из основной таблицы, если на нее есть ссылки из внешних ключей в другой таблице. Так не получится случайно завести базу в<strong>неконсистентное состояние</strong>- когда данные ссылаются на несуществующие данные.</p>
29
<p>Благодаря вторичному ключу поддерживаются гарантии корректности данных. Например, невозможно удалить запись из основной таблицы, если на нее есть ссылки из внешних ключей в другой таблице. Так не получится случайно завести базу в<strong>неконсистентное состояние</strong>- когда данные ссылаются на несуществующие данные.</p>
30
<h2>Выводы</h2>
30
<h2>Выводы</h2>
31
<p>В этом уроке мы разобрали вторую нормальную форму, ее свойства, а также ее зависимость от внешнего ключа. Осталось изучить третью форму - и у вас будет полное понимание самых распространенных форм в базах данных.</p>
31
<p>В этом уроке мы разобрали вторую нормальную форму, ее свойства, а также ее зависимость от внешнего ключа. Осталось изучить третью форму - и у вас будет полное понимание самых распространенных форм в базах данных.</p>