HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Определение</a><ul><li><a>Особенности</a></li>
1 <ul><li><a>Определение</a><ul><li><a>Особенности</a></li>
2 </ul></li>
2 </ul></li>
3 <li><a>Простой и составной ключи</a></li>
3 <li><a>Простой и составной ключи</a></li>
4 <li><a>Создание</a><ul><li><a>Create table</a></li>
4 <li><a>Создание</a><ul><li><a>Create table</a></li>
5 <li><a>Alter create</a></li>
5 <li><a>Alter create</a></li>
6 </ul></li>
6 </ul></li>
7 <li><a>Наглядные примеры</a><ul><li><a>Alter table - пример</a></li>
7 <li><a>Наглядные примеры</a><ul><li><a>Alter table - пример</a></li>
8 </ul></li>
8 </ul></li>
9 <li><a>О связи между таблицами</a></li>
9 <li><a>О связи между таблицами</a></li>
10 <li><a>Удаление</a></li>
10 <li><a>Удаление</a></li>
11 </ul><p>При создании таблицы с реляционными данными требуется использование так называемых ключей. Они бывают первичными (primary key) и внешними. Далее предстоит разобраться с тем, как их создать и удалить.</p>
11 </ul><p>При создании таблицы с реляционными данными требуется использование так называемых ключей. Они бывают первичными (primary key) и внешними. Далее предстоит разобраться с тем, как их создать и удалить.</p>
12 <p>Представленная информация пригодится всем, кто планирует работать в базе данных SQL Language и T-SQL. Она подойдет как новичкам, так и уже опытным специалистам.</p>
12 <p>Представленная информация пригодится всем, кто планирует работать в базе данных SQL Language и T-SQL. Она подойдет как новичкам, так и уже опытным специалистам.</p>
13 <h2>Определение</h2>
13 <h2>Определение</h2>
14 <p>Первичный ключ - это специальное поле в таблице, которое однозначно идентифицирует каждую запись/строку в БД. Они содержат уникальные значения. NULL в столбце первичного ключа стоять не может.</p>
14 <p>Первичный ключ - это специальное поле в таблице, которое однозначно идентифицирует каждую запись/строку в БД. Они содержат уникальные значения. NULL в столбце первичного ключа стоять не может.</p>
15 <p>Соответствующий ключ - это комбинация полей, однозначно определяющая запись. Если для таблицы БД был создан такой элемент в определенном поле, в нем не может быть несколько записей с одинаковыми значениями.</p>
15 <p>Соответствующий ключ - это комбинация полей, однозначно определяющая запись. Если для таблицы БД был создан такой элемент в определенном поле, в нем не может быть несколько записей с одинаковыми значениями.</p>
16 <p>Первичный ключ может быть:</p>
16 <p>Первичный ключ может быть:</p>
17 <ul><li>естественным - он существует в настоящем мире (паспортные данные, фамилии и имена и так далее);</li>
17 <ul><li>естественным - он существует в настоящем мире (паспортные данные, фамилии и имена и так далее);</li>
18 <li>суррогатным - не поддерживает существование в реальности (пример - порядковый номер).</li>
18 <li>суррогатным - не поддерживает существование в реальности (пример - порядковый номер).</li>
19 </ul><p>Соответствующий элемент должен являться минимально достаточным. В нем должны отсутствовать поля, удаление которых не отразится непосредственно на уникальности. Соответствующее правило не является обязательным, но его рекомендуется соблюдать.</p>
19 </ul><p>Соответствующий элемент должен являться минимально достаточным. В нем должны отсутствовать поля, удаление которых не отразится непосредственно на уникальности. Соответствующее правило не является обязательным, но его рекомендуется соблюдать.</p>
20 <h3>Особенности</h3>
20 <h3>Особенности</h3>
21 <p>Создается первичный ключ с некоторыми ограничениями:</p>
21 <p>Создается первичный ключ с некоторыми ограничениями:</p>
22 <ol><li>Записи, которые относятся к соответствующему первичному идентификатору, должны быть обязательно уникальными. Это значит, что, если первичные ключи состоят из одного поля, все записи в нем - неповторимые. При содержании идентификатора сразу в нескольких "областях", комбинация задействованных полей уникальна. В отдельных частях допускаются повторения.</li>
22 <ol><li>Записи, которые относятся к соответствующему первичному идентификатору, должны быть обязательно уникальными. Это значит, что, если первичные ключи состоят из одного поля, все записи в нем - неповторимые. При содержании идентификатора сразу в нескольких "областях", комбинация задействованных полей уникальна. В отдельных частях допускаются повторения.</li>
23 <li>Записи в полях, которые относятся к primary key, обязательно заполняются информацией. Пустыми они быть не могут. Соответствующее ограничение в PostgreSQL носит название not null.</li>
23 <li>Записи в полях, которые относятся к primary key, обязательно заполняются информацией. Пустыми они быть не могут. Соответствующее ограничение в PostgreSQL носит название not null.</li>
24 <li>Для каждой таблички в базе данных можно создавать всего один первичный ключ.</li>
24 <li>Для каждой таблички в базе данных можно создавать всего один первичный ключ.</li>
25 </ol><p>Запомнив соответствующие принципы, добиться желаемого результата будет намного проще.</p>
25 </ol><p>Запомнив соответствующие принципы, добиться желаемого результата будет намного проще.</p>
26 <h2>Простой и составной ключи</h2>
26 <h2>Простой и составной ключи</h2>
27 <p>Простой ключ - это уникальный идентификатор, который включает в себя всего одно поле (атрибут). Он является наиболее распространенным.</p>
27 <p>Простой ключ - это уникальный идентификатор, который включает в себя всего одно поле (атрибут). Он является наиболее распространенным.</p>
28 <p>Составной первичный ключ - идентификатор, состоящий из нескольких (два и более) атрибутов. Иногда он называется композитным (composite key).</p>
28 <p>Составной первичный ключ - идентификатор, состоящий из нескольких (два и более) атрибутов. Иногда он называется композитным (composite key).</p>
29 <p>Пример - личных документов одного типа с одними и теми же данными (серия и номер) не бывает. Из-за этого в отношении, содержащем сведения о людях, первичным ключом выступает только подмножество полей из типа личного документа, его серии и номера. Других вариантов нет и быть не может.</p>
29 <p>Пример - личных документов одного типа с одними и теми же данными (серия и номер) не бывает. Из-за этого в отношении, содержащем сведения о людях, первичным ключом выступает только подмножество полей из типа личного документа, его серии и номера. Других вариантов нет и быть не может.</p>
30 <h2>Создание</h2>
30 <h2>Создание</h2>
31 <p>Задумываясь над тем, как создать первичный (primary) ключ в базе данных, необходимо обратить внимание на несколько операторов:</p>
31 <p>Задумываясь над тем, как создать первичный (primary) ключ в базе данных, необходимо обратить внимание на несколько операторов:</p>
32 <ul><li>create table;</li>
32 <ul><li>create table;</li>
33 <li>alter table.</li>
33 <li>alter table.</li>
34 </ul><p>Оба варианта подойдут для непосредственного формирования уникального идентификатора в БД. Далее предстоит изучить каждый из них более подробно.</p>
34 </ul><p>Оба варианта подойдут для непосредственного формирования уникального идентификатора в БД. Далее предстоит изучить каждый из них более подробно.</p>
35 <h3>Create table</h3>
35 <h3>Create table</h3>
36 <p>Первичный ключ может быть создан при непосредственном выполнении оператора create table, который поддерживает язык SQL. Он обладает следующим синтаксисом:</p>
36 <p>Первичный ключ может быть создан при непосредственном выполнении оператора create table, который поддерживает язык SQL. Он обладает следующим синтаксисом:</p>
37 <p>Или:</p>
37 <p>Или:</p>
38 <p>Здесь:</p>
38 <p>Здесь:</p>
39 <ul><li>table_name - имя таблицы, которую хочется создать;</li>
39 <ul><li>table_name - имя таблицы, которую хочется создать;</li>
40 <li>pk_col1, pk_col2, …, pk_col_n - определяют составляющие первичного ключа;</li>
40 <li>pk_col1, pk_col2, …, pk_col_n - определяют составляющие первичного ключа;</li>
41 <li>column1, column2 - столбцы, создаваемые в БД;</li>
41 <li>column1, column2 - столбцы, создаваемые в БД;</li>
42 <li>constraint_name - название первичного ключа.</li>
42 <li>constraint_name - название первичного ключа.</li>
43 </ul><p>Позже будет изучен наглядный пример, с помощью которого удастся лучше разобраться с изучаемой темой.</p>
43 </ul><p>Позже будет изучен наглядный пример, с помощью которого удастся лучше разобраться с изучаемой темой.</p>
44 <h3>Alter create</h3>
44 <h3>Alter create</h3>
45 <p>Операторы языка SQL позволяют создавать первичные ключи через alter create. Этот вариант применим для ситуации, в которой таблица уже существует. Primary key в ней формируется позже.</p>
45 <p>Операторы языка SQL позволяют создавать первичные ключи через alter create. Этот вариант применим для ситуации, в которой таблица уже существует. Primary key в ней формируется позже.</p>
46 <p>Синтаксис будет иметь следующий вид:</p>
46 <p>Синтаксис будет иметь следующий вид:</p>
47 <p>Здесь:</p>
47 <p>Здесь:</p>
48 <ul><li>table_name - имя таблицы, в которой будет создаваться уникальный идентификатор;</li>
48 <ul><li>table_name - имя таблицы, в которой будет создаваться уникальный идентификатор;</li>
49 <li>constraint_name - название primary key;</li>
49 <li>constraint_name - название primary key;</li>
50 <li>column1, column2, …, column_n - составляющие уникального идентификатора.</li>
50 <li>column1, column2, …, column_n - составляющие уникального идентификатора.</li>
51 </ul><p>Больше ничего о том, как создать первичный (primary) ключ, знать не нужно. Этой информации хватит для начала работы с уникальными идентификаторами.</p>
51 </ul><p>Больше ничего о том, как создать первичный (primary) ключ, знать не нужно. Этой информации хватит для начала работы с уникальными идентификаторами.</p>
52 <h2>Наглядные примеры</h2>
52 <h2>Наглядные примеры</h2>
53 <p>Операторы языка SQL позволяют создавать идентификаторы таблиц несколькими способами. Первый - это через create table. Вот наглядный пример применения соответствующей концепции на практике.</p>
53 <p>Операторы языка SQL позволяют создавать идентификаторы таблиц несколькими способами. Первый - это через create table. Вот наглядный пример применения соответствующей концепции на практике.</p>
54 <p>В нем создан первичный ключ для таблицы suppliers. Он носит название sources_pk. Включает в себя только один столбец - supplier_id.</p>
54 <p>В нем создан первичный ключ для таблицы suppliers. Он носит название sources_pk. Включает в себя только один столбец - supplier_id.</p>
55 <p>Выше - альтернативный синтаксис. Он подойдет при создании обычного первичного ключа для таблицы через create table. Если он составной, то для формирования такого идентификатора подойдет исключительно первый вариант. В нем ключи определены в конце оператора create table. На практике это выглядит так:</p>
55 <p>Выше - альтернативный синтаксис. Он подойдет при создании обычного первичного ключа для таблицы через create table. Если он составной, то для формирования такого идентификатора подойдет исключительно первый вариант. В нем ключи определены в конце оператора create table. На практике это выглядит так:</p>
56 <p>Здесь происходит создание key с именем contacts_pk. Он включает в себя комбинацию сразу нескольких столбцов. А именно - last_name и first_name. Из-за этого каждое их сочетание должно являться уникальным для таблицы contacts.</p>
56 <p>Здесь происходит создание key с именем contacts_pk. Он включает в себя комбинацию сразу нескольких столбцов. А именно - last_name и first_name. Из-за этого каждое их сочетание должно являться уникальным для таблицы contacts.</p>
57 <h3>Alter table - пример</h3>
57 <h3>Alter table - пример</h3>
58 <p>А вот еще один наглядный пример. Он позволяет сделать keys через alter table.</p>
58 <p>А вот еще один наглядный пример. Он позволяет сделать keys через alter table.</p>
59 <p>В заданном примере уже есть готовая таблица под названием suppliers. Primary key здесь - это sources_pk. Он формируется для ранее созданной таблицы в SQL. Включает в себя столбец supplier_id. Это - вариант всего для идентификатора всего с одним полем.</p>
59 <p>В заданном примере уже есть готовая таблица под названием suppliers. Primary key здесь - это sources_pk. Он формируется для ранее созданной таблицы в SQL. Включает в себя столбец supplier_id. Это - вариант всего для идентификатора всего с одним полем.</p>
60 <p>А вот - пример, который позволяет сформировать рассматриваемый компонент с несколькими "областями". В нем первичным ключом в SQL выступает supplier_pk, который содержит комбинации столбцов supplier_id, а также supplier_name.</p>
60 <p>А вот - пример, который позволяет сформировать рассматриваемый компонент с несколькими "областями". В нем первичным ключом в SQL выступает supplier_pk, который содержит комбинации столбцов supplier_id, а также supplier_name.</p>
61 <h2>О связи между таблицами</h2>
61 <h2>О связи между таблицами</h2>
62 <p>Предложенные ранее примеры объясняют создание идентификатора для одной таблицы. Это редкое явление в базах данных. Обычно в них несколько таблиц, связанных между собой. Первостепенной задачей, которую поддерживают "ключевые идентификаторы" - это уникальная идентификация каждой строчки. Также primary key решает еще одну задачу - связывание нескольких заданных таблиц. Для этого используются:</p>
62 <p>Предложенные ранее примеры объясняют создание идентификатора для одной таблицы. Это редкое явление в базах данных. Обычно в них несколько таблиц, связанных между собой. Первостепенной задачей, которую поддерживают "ключевые идентификаторы" - это уникальная идентификация каждой строчки. Также primary key решает еще одну задачу - связывание нескольких заданных таблиц. Для этого используются:</p>
63 <ul><li>первичные ключевые элементы;</li>
63 <ul><li>первичные ключевые элементы;</li>
64 <li>внешний ключ SQL.</li>
64 <li>внешний ключ SQL.</li>
65 </ul><p>В одной таблице создается внешний ключ. Он будет ссылаться на поля другой имеющейся таблицы. Здесь действуют такие ограничения:</p>
65 </ul><p>В одной таблице создается внешний ключ. Он будет ссылаться на поля другой имеющейся таблицы. Здесь действуют такие ограничения:</p>
66 <ul><li>соответствующие поля присутствуют в той таблице, на которую ссылается внешний key;</li>
66 <ul><li>соответствующие поля присутствуют в той таблице, на которую ссылается внешний key;</li>
67 <li>ссылается внешний ключ обычно на primary key другой таблицы.</li>
67 <li>ссылается внешний ключ обычно на primary key другой таблицы.</li>
68 </ul><p>В качестве наглядного примера можно взять таблицу "Ученики" - pupils. Она будет выглядеть так:</p>
68 </ul><p>В качестве наглядного примера можно взять таблицу "Ученики" - pupils. Она будет выглядеть так:</p>
69 <p>Вторая табличка - "Успеваемость" - evaluations:</p>
69 <p>Вторая табличка - "Успеваемость" - evaluations:</p>
70 <p>В качестве первичного ключа определяют поле "ФИО" из "Ученики". Связано это с тем, что оно есть как в первом "списке", так и во втором. Оценку ученику, которого не существует, в реальной жизни поставить не получится.</p>
70 <p>В качестве первичного ключа определяют поле "ФИО" из "Ученики". Связано это с тем, что оно есть как в первом "списке", так и во втором. Оценку ученику, которого не существует, в реальной жизни поставить не получится.</p>
71 <p>Первичный ключ - это "ФИО" в "Учениках". Внешним выступит такое же поле, но из "Успеваемость". Если в первом "списке" удалить слово или какие-нибудь данные, все его оценки удаляются из второго.</p>
71 <p>Первичный ключ - это "ФИО" в "Учениках". Внешним выступит такое же поле, но из "Успеваемость". Если в первом "списке" удалить слово или какие-нибудь данные, все его оценки удаляются из второго.</p>
72 <p>Также стоит обратить внимание на то, что первичный ключ будет автоматически создавать индекс. С их помощью удается быстрее получать доступ к строкам. Индексы - ключевые компоненты, которые накладывают ограничения на уникальность. Двух Петровых Петров Петровичей существовать не может.</p>
72 <p>Также стоит обратить внимание на то, что первичный ключ будет автоматически создавать индекс. С их помощью удается быстрее получать доступ к строкам. Индексы - ключевые компоненты, которые накладывают ограничения на уникальность. Двух Петровых Петров Петровичей существовать не может.</p>
73 <p>Только в реальности такое имеет место. Поэтому приходится искать выходы из ситуации. Исправить положение помогают такие компоненты и "слова" как:</p>
73 <p>Только в реальности такое имеет место. Поэтому приходится искать выходы из ситуации. Исправить положение помогают такие компоненты и "слова" как:</p>
74 <ul><li>первичный ключ составного типа - в качестве него можно задействовать поля "ФИО", а также "Класс";</li>
74 <ul><li>первичный ключ составного типа - в качестве него можно задействовать поля "ФИО", а также "Класс";</li>
75 <li>суррогатный первичный идентификатор - в "Ученики" добавить поле "Номер ученика" (id int), а затем сделать его первичным;</li>
75 <li>суррогатный первичный идентификатор - в "Ученики" добавить поле "Номер ученика" (id int), а затем сделать его первичным;</li>
76 <li>добавление более уникального поля - в качестве примера допускается использование уникального номера зачетной книжки.</li>
76 <li>добавление более уникального поля - в качестве примера допускается использование уникального номера зачетной книжки.</li>
77 </ul><p>Запомнив все эти слова о primary в SQL, можно изучить несколько наглядных примеров реализации задачи. Они представлены<a>здесь</a>и<a>тут</a>во всех подробностях.</p>
77 </ul><p>Запомнив все эти слова о primary в SQL, можно изучить несколько наглядных примеров реализации задачи. Они представлены<a>здесь</a>и<a>тут</a>во всех подробностях.</p>
78 <h2>Удаление</h2>
78 <h2>Удаление</h2>
79 <p>Если первичный ключ больше не нужен, его можно удалить. Для этого используется оператор Atler Table:</p>
79 <p>Если первичный ключ больше не нужен, его можно удалить. Для этого используется оператор Atler Table:</p>
80 <p>В этом синтаксисе table_name - табличка, которую необходимо откорректировать.</p>
80 <p>В этом синтаксисе table_name - табличка, которую необходимо откорректировать.</p>
81 <p>Выше - наглядный пример того, как это выглядит в коде. Имя уникального идентификатора указывать не потребуется. Связано это с тем, что он у таблички может быть всего один. Система автоматически поймет, от чего необходимо избавиться.</p>
81 <p>Выше - наглядный пример того, как это выглядит в коде. Имя уникального идентификатора указывать не потребуется. Связано это с тем, что он у таблички может быть всего один. Система автоматически поймет, от чего необходимо избавиться.</p>
82 <p>Хотите знать про базы данных больше? Записывайтесь на курс!</p>
82 <p>Хотите знать про базы данных больше? Записывайтесь на курс!</p>
83 <p><em>Прокачать <a>навыки работы с базами данных</a> можно на курсах Otus.</em></p>
83 <p><em>Прокачать <a>навыки работы с базами данных</a> можно на курсах Otus.</em></p>
84  
84