HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Первичные и внешние ключи в базах данных относятся к ограничению. Оно включает в себя различные модификаторы колонок в базе данных, которые добавляют ограничения на их содержимое. В этом уроке мы рассмотрим уже известные ограничения, а также изучим новые.</p>
1 <p>Первичные и внешние ключи в базах данных относятся к ограничению. Оно включает в себя различные модификаторы колонок в базе данных, которые добавляют ограничения на их содержимое. В этом уроке мы рассмотрим уже известные ограничения, а также изучим новые.</p>
2 <h2>Первичный ключ</h2>
2 <h2>Первичный ключ</h2>
3 <p><strong>Первичный ключ</strong>однозначно идентифицирует каждую запись внутри таблицы. Задается с помощью фразы PRIMARY KEY, которая добавляется после указания типа, когда создается таблица. Первичный ключ в таблице может быть только один, и для него используется суррогатный ключ - идентификатор, у которого нет физического смысла:</p>
3 <p><strong>Первичный ключ</strong>однозначно идентифицирует каждую запись внутри таблицы. Задается с помощью фразы PRIMARY KEY, которая добавляется после указания типа, когда создается таблица. Первичный ключ в таблице может быть только один, и для него используется суррогатный ключ - идентификатор, у которого нет физического смысла:</p>
4 <h2>Внешний ключ</h2>
4 <h2>Внешний ключ</h2>
5 <p><strong>Внешний ключ</strong>- это ограничение, которое связывает указанную колонку с данными из другой таблицы. Такое ограничение гарантирует целостность данных. То есть попытка удалить данные, у которых есть зависимые данные, приведет к ошибке:</p>
5 <p><strong>Внешний ключ</strong>- это ограничение, которое связывает указанную колонку с данными из другой таблицы. Такое ограничение гарантирует целостность данных. То есть попытка удалить данные, у которых есть зависимые данные, приведет к ошибке:</p>
6 <p>В данной таблице атрибут product_id связан с атрибутом id таблицы products. Синтаксически для этого добавляется ключевое слово<em>REFERENCES</em>после типа поля. Затем добавляется имя таблицы, на которую идет связь. В скобках указывается поле, с которым эта связь создается. Наличие такой связи проявляется следующим образом:</p>
6 <p>В данной таблице атрибут product_id связан с атрибутом id таблицы products. Синтаксически для этого добавляется ключевое слово<em>REFERENCES</em>после типа поля. Затем добавляется имя таблицы, на которую идет связь. В скобках указывается поле, с которым эта связь создается. Наличие такой связи проявляется следующим образом:</p>
7 <ul><li>Если попробовать вставить в orders запись со значением product_id, которого нет в таблице products, то возникнет ошибка</li>
7 <ul><li>Если попробовать вставить в orders запись со значением product_id, которого нет в таблице products, то возникнет ошибка</li>
8 <li>Если попытаться удалить запись из products, на которую есть ссылки из таблицы orders, то возникнет ошибка</li>
8 <li>Если попытаться удалить запись из products, на которую есть ссылки из таблицы orders, то возникнет ошибка</li>
9 </ul><p>Внешний ключ проверяет целостность данных и не позволяет появляться "мусору". Поэтому лучше ставить внешние ключи на все идентификаторы, для которых есть родительская таблица в базе.</p>
9 </ul><p>Внешний ключ проверяет целостность данных и не позволяет появляться "мусору". Поэтому лучше ставить внешние ключи на все идентификаторы, для которых есть родительская таблица в базе.</p>
10 <p>Внешние ключи поддерживают несколько вариаций. Таким образом они поддерживают целостность, но не приводят к ошибкам при попытке удалить запись.</p>
10 <p>Внешние ключи поддерживают несколько вариаций. Таким образом они поддерживают целостность, но не приводят к ошибкам при попытке удалить запись.</p>
11 <p><strong>Вариант 1</strong>- Каскадное удаление:</p>
11 <p><strong>Вариант 1</strong>- Каскадное удаление:</p>
12 <p>В таком варианте при попытке удалить родительскую запись (<em>products</em>) будут удалены все записи в<em>orders</em>, которые ссылаются на этот продукт. Каскадное удаление - опасная опция, так как можно случайно лишиться данных. Стоит хорошо подумать, прежде чем включать ее.</p>
12 <p>В таком варианте при попытке удалить родительскую запись (<em>products</em>) будут удалены все записи в<em>orders</em>, которые ссылаются на этот продукт. Каскадное удаление - опасная опция, так как можно случайно лишиться данных. Стоит хорошо подумать, прежде чем включать ее.</p>
13 <p><strong>Вариант 2</strong>- Записи остаются, но вместо идентификатора проставляется null:</p>
13 <p><strong>Вариант 2</strong>- Записи остаются, но вместо идентификатора проставляется null:</p>
14 <p>Используется нечасто, но иногда может быть полезно.</p>
14 <p>Используется нечасто, но иногда может быть полезно.</p>
15 <h2>Not Null</h2>
15 <h2>Not Null</h2>
16 <p><strong>Not Null</strong>- это ограничение указывает на то, что колонка не может содержать null значения. Его можно комбинировать с другими ограничениями, например, внешними ключами. Первичный ключ является NOT NULL по умолчанию:</p>
16 <p><strong>Not Null</strong>- это ограничение указывает на то, что колонка не может содержать null значения. Его можно комбинировать с другими ограничениями, например, внешними ключами. Первичный ключ является NOT NULL по умолчанию:</p>
17 <h2>Уникальность</h2>
17 <h2>Уникальность</h2>
18 <p>Чтобы гарантировать уникальность значений одного поля, используется ключевое слово UNIQUE. Обычно его используют в описании конкретного поля, когда создается таблица:</p>
18 <p>Чтобы гарантировать уникальность значений одного поля, используется ключевое слово UNIQUE. Обычно его используют в описании конкретного поля, когда создается таблица:</p>
19 <p>UNIQUE никогда не используется совместно с первичным ключом, так как он уникален по определению.</p>
19 <p>UNIQUE никогда не используется совместно с первичным ключом, так как он уникален по определению.</p>
20 <p>Иногда бывает нужно реализовать уникальность по двум или более атрибутам. Для этого нужно описать UNIQUE отдельно от конкретного поля:</p>
20 <p>Иногда бывает нужно реализовать уникальность по двум или более атрибутам. Для этого нужно описать UNIQUE отдельно от конкретного поля:</p>
21 <p>Существует ситуация, в которой ограничение уникальности не срабатывает. Такое происходит, если хотя бы в одном из столбцов, включенных в ограничение, встречается NULL. По стандарту, NULL никогда не равен самому себе.</p>
21 <p>Существует ситуация, в которой ограничение уникальности не срабатывает. Такое происходит, если хотя бы в одном из столбцов, включенных в ограничение, встречается NULL. По стандарту, NULL никогда не равен самому себе.</p>
22 <h2>Выводы</h2>
22 <h2>Выводы</h2>
23 <p>В этом уроке мы узнали чуть больше об ограничении первичного и внешнего ключей. Еще познакомились с новыми полезными ограничениями: Not Null и уникальность. Они указывают на то, что колонка не может содержать null значения и гарантируют уникальность поля, соответственно.</p>
23 <p>В этом уроке мы узнали чуть больше об ограничении первичного и внешнего ключей. Еще познакомились с новыми полезными ограничениями: Not Null и уникальность. Они указывают на то, что колонка не может содержать null значения и гарантируют уникальность поля, соответственно.</p>