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