HTML Diff
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 &lt;название таблицы, на которую смотрим&gt; (&lt;список полей в той таблице, которым соответствуем&gt;)</p>
28 <p>REFERENCES &lt;название таблицы, на которую смотрим&gt; (&lt;список полей в той таблице, которым соответствуем&gt;)</p>
29 <p>Благодаря вторичному ключу поддерживаются гарантии корректности данных. Например, невозможно удалить запись из основной таблицы, если на нее есть ссылки из внешних ключей в другой таблице. Так не получится случайно завести базу в<strong>неконсистентное состояние</strong>- когда данные ссылаются на несуществующие данные.</p>
29 <p>Благодаря вторичному ключу поддерживаются гарантии корректности данных. Например, невозможно удалить запись из основной таблицы, если на нее есть ссылки из внешних ключей в другой таблице. Так не получится случайно завести базу в<strong>неконсистентное состояние</strong>- когда данные ссылаются на несуществующие данные.</p>
30 <h2>Выводы</h2>
30 <h2>Выводы</h2>
31 <p>В этом уроке мы разобрали вторую нормальную форму, ее свойства, а также ее зависимость от внешнего ключа. Осталось изучить третью форму - и у вас будет полное понимание самых распространенных форм в базах данных.</p>
31 <p>В этом уроке мы разобрали вторую нормальную форму, ее свойства, а также ее зависимость от внешнего ключа. Осталось изучить третью форму - и у вас будет полное понимание самых распространенных форм в базах данных.</p>