Какая характеристика компьютера может быть использовано в качестве первичного ключа

Обновлено: 07.07.2024

Первичный ключ — это поле или набор полей со значениями, которые являются уникальными для всей таблицы. Значения ключа могут использоваться для обозначения всех записей, при этом каждая запись имеет отдельное значение ключа. Каждая таблица может содержать только один первичный ключ. Access может автоматически создавать поле первичного ключа при создании таблицы. Вы также можете самостоятельно указать поля, которые нужно использовать в качестве первичного ключа. В этой статье объясняется, как и зачем использовать первичные ключи.

Чтобы задать первичный ключ таблицы, откройте таблицу в режиме конструктора. Выберите нужное поле (или поля), а затем на ленте щелкните Ключевое поле.

Примечание: Эта статья относится только к классическим базам данных Access. В веб-приложениях Access и веб-базах данных первичный ключ для новых таблиц назначается автоматически. Несмотря на то что автоматические первичные ключи можно менять, делать это не рекомендуется.

В этой статье

Общие сведения о первичных ключах в Access

Используя поля первичных ключей, Access быстро связывает данные из нескольких таблиц и объединяет их понятным образом. Вы можете добавить поля первичных ключей в другие таблицы, чтобы ссылаться на таблицу, которая является источником первичного ключа. В других таблицах поля называются внешними ключами. Например, поле "ИД клиента" в таблице "Клиенты" также может отображаться в таблице "Заказы". В таблице "Клиенты" оно является первичным ключом. В таблице "Заказы" оно называется внешним ключом. Проще говоря, внешний ключ — это первичный ключ другой таблицы. Дополнительные сведения см. в статье Основные сведения о создании баз данных.

1. Первичный ключ

При переносе существующих данных в базу данных в них уже может существовать поле, которое можно использовать как первичный ключ. Часто в роли первичного ключа таблицы выступает уникальный идентификационный номер, например порядковый или инвентарный номер или код. Например, в таблице "Клиенты" для каждого клиента может быть указан уникальный код клиента. Поле кода клиента является первичным ключом.

Для первичного ключа автоматически создается индекс, ускоряющий выполнение запросов и операций. Кроме того, приложение Access проверяет наличие и уникальность значений в поле первичного ключа.

При создании таблицы в режиме таблицы Access автоматически создает первичный ключ с именем "Код" и типом данных "Счетчик".

Создание приемлемого первичного ключа

Чтобы правильно выбрать первичный ключ, следует учитывать несколько характеристик.

Ключ должен однозначно определять каждую строку.

В нем не должно быть пустых или отсутствующих значений — он всегда содержит значение.

Ключ крайне редко изменяется (в идеале — никогда).

Если не удается определить приемлемый ключ, создайте для него поле с типом данных "Счетчик". Поле "Счетчик" заполняется автоматически созданными значениями при первом сохранении каждой записи. Таким образом, поле "Счетчик" соответствует всем трем характеристикам приемлемого первичного ключа. Дополнительные сведения о добавлении поля "Счетчик" см. в статье Добавление поля счетчика в качестве первичного ключа.

Первичный ключ с типом данных "Счетчик", обозначенный как "ИД" в таблице Access в режиме конструктора

Поле с типом данных "Счетчик" является хорошим первичным ключом.

Примеры неудачных первичных ключей

Любое поле, не имеющее одной или нескольких характеристик подходящего первичного ключа, не следует выбирать в качестве первичного ключа. Ниже представлено несколько примеров полей, которые не годятся на роль первичного ключа в таблице "Контакты", и пояснения, почему их не следует использовать.

Подробное объяснение первичных и внешних ключей базы данных MySQL

Подробное объяснение первичных и внешних ключей базы данных MySQL

Основной ключ

Определение первичного ключа

Основной ключ:Часто в таблице есть один столбец или комбинация нескольких столбцов, и его значение может однозначно идентифицировать каждую строку в таблице.. Один или несколько таких столбцов называются первичным ключом таблицы, с помощью которого может быть обеспечена целостность объекта таблицы. При создании или изменении таблиц вы можете создать первичный ключ, определив ограничения PRIMARY KEY. Таблица может иметь только одно ограничение PRIMARY KEY, а столбцы в ограничении PRIMARY KEY не могут принимать нулевые значения. Поскольку ограничения PRIMARY KEY обеспечивают уникальность данных, они часто используются для определения столбцов идентификации.

эффект:

1) Обеспечить целостность сущности;

2) Ускорить работу базы данных

3) Когда в таблицу добавляется новая запись, СУБД автоматически проверяет значение первичного ключа новой записи, и ей не разрешается дублировать значение первичного ключа других записей.

4) СУБД автоматически отображает записи в таблице в порядке значения первичного ключа. Если первичный ключ не определен, записи в таблице отображаются в порядке входных записей.

Совместный первичный ключ

На самом деле реляционные базы данных позволяют однозначно идентифицировать записи по нескольким полям, то есть в качестве первичного ключа устанавливаются два или более полей. Этот первичный ключ называется комбинированным первичным ключом.

Для комбинированного первичного ключа разрешено повторение одного столбца, если не повторяются все столбцы первичного ключа.

Характеристики первичного ключа

Необходимость первичного ключа

В некоторых базах данных, хотя первичный ключ не требуется, лучше всего установить первичный ключ для каждой таблицы, будь то одиночный первичный ключ или составной первичный ключ. Его существование представляет собой целостность структуры таблицы. Записи в таблице должны иметь однозначно различимые поля. Первичный ключ в основном используется для связывания внешнего ключа с другими таблицами, а также для модификации и удаления этой записи.

Бессмысленность первичного ключа

Поскольку роль первичного ключа очень важна, выбор первичного ключа будет иметь важное значение для развития бизнеса. Если мы используем идентификационный номер студента в качестве первичного ключа, кажется, что мы можем однозначно найти запись. Однако идентификационный номер также является бизнес-сценарием. Если идентификационный номер обновляется или его необходимо изменить, это окажет серьезное влияние на бизнес, когда он будет использоваться в качестве первичного ключа и должен быть изменен.

Основной принцип выбора первичного ключа: не используйте в качестве первичного ключа какие-либо бизнес-поля.

Следовательно, эти, казалось бы, уникальные поля, такие как идентификационный номер, номер мобильного телефона и адрес электронной почты, являютсяНетИспользуется как первичный ключ.

Выбор первичного ключа

Для большинства приложений обычно автоматически увеличивающиеся первичные ключи могут удовлетворить потребности

Обычно используется первичный ключ определенного самовозрастающего целочисленного типа. BIGINT NOT NULL AUTO_INCREMENT Типы.

Если вы используете тип автоинкремента INT, когда количество записей в таблице превышает 2147483647 (около 2,1 миллиарда), будет достигнут верхний предел и возникнет ошибка. При использовании типа автоинкремента BIGINT может быть до 92,2 миллиардов записей.

Внешний ключ

Определение внешнего ключа

в случаеПубличные ключевые словаВ отношенияхОсновной ключ, Тогда этоПубличные ключевые словаВызывают другие отношенияВнешний ключ. Можно видеть, что внешний ключ представляет собой корреляцию между двумя отношениями. Таблица с внешним ключом другой связи в качестве первичного ключа называется первичной таблицей, а таблица с внешним ключом называется вторичной таблицей первичной таблицы. Внешние ключи также называются внешними ключевыми словами.

Например:

стол для студентов:

таблица классов:

Поскольку в классе может быть несколько учеников, в реляционной модели связь между этими двумя таблицами может быть названа "один ко многим", то есть одна class Записи могут соответствовать нескольким student Табличные записи.

Чтобы выразить это отношение "один ко многим", нам нужно student Добавить столбец в таблицу class_id , Пусть его значение совпадает class Соответствует записи таблицы.

Таким образом, мы можем class_id Этот столбец непосредственно определяет местонахождение student Записи таблицы должны соответствовать class Какая запись.

в student В таблице через class_id Поле, вы можете связать данные с другой таблицей, этот столбец называется Внешний ключ 。

Внешний ключ реализуется не по именам столбцов, а путем определения ограничений внешнего ключа:

class_id - это внешний ключ таблицы учеников. (В настоящее время student Class_id в таблице и class Идентификатор в таблице имеет то же значение)

На данный момент таблица внешнего ключа student Таблица, таблица первичного ключа class Таблица.

Чтобы удалить ограничение внешнего ключа, также через ALTER TABLE Реализовано:

Поскольку ограничения внешнего ключа снижают производительность базы данных, большинство Интернет-приложений не устанавливают ограничения внешнего ключа в погоне за скоростью, а полагаются на само приложение, чтобы гарантировать правильность логики. В этой ситуации, class_id Это обычный столбец, но он действует как внешний ключ.

Выберите поле, чтобы установить внешний ключ MySQL

  • Родительская таблица должна уже существовать в базе данных или быть таблицей, которая создается в данный момент. В последнем случае родительская таблица и дочерняя таблица являются одной и той же таблицей, такая таблица называется самореферентной таблицей, а эта структура называется самореферентной целостностью.
  • Первичный ключ должен быть определен для родительской таблицы.
  • Первичный ключ не может содержать пустые значения, но пустые значения разрешены во внешних ключах. Другими словами, до тех пор, пока каждое ненулевое значение внешнего ключа появляется в указанном первичном ключе, содержимое внешнего ключа является правильным.
  • Укажите имя столбца или комбинацию имен столбцов после имени родительской таблицы. Этот столбец или комбинация столбцов должны быть первичным ключом или ключом-кандидатом родительской таблицы.
  • Количество столбцов во внешнем ключе должно быть таким же, как количество столбцов в первичном ключе родительской таблицы.
  • Тип данных столбца во внешнем ключе должен быть таким же, как тип данных соответствующего столбца в первичном ключе родительской таблицы.

Роль внешних ключей

** Поддерживайте согласованность и целостность данных. ** Основная цель - контролировать данные, хранящиеся в таблице внешнего ключа. Чтобы связать две таблицы, внешний ключ может ссылаться только на значение столбца во внешней таблице или использовать нулевое значение

Ограничение внешнего ключа

    Основная таблица (родительская таблица)

    Для двух таблиц с отношениями связи таблица с первичным ключом в связанном поле является первичной таблицей.

    Указанная таблица называется основной (родительской).

Подчиненная таблица (дочерняя таблица)

Для двух таблиц с отношением ассоциации таблица, в которой расположен внешний ключ в связанном поле, является подчиненной таблицей.

Таблица, определяющая внешний ключ, называется подчиненной таблицей (дочерней таблицей).

Роль ограничений внешнего ключа:

Блокировать выполнение

  • Вставить новую строку из таблицы, если значение внешнего ключа не является значением первичного ключа основной таблицы, вставка запрещена;
  • Измените значение внешнего ключа из таблицы.Если новое значение не является значением первичного ключа основной таблицы, изменение предотвращается;
  • Первичная таблица удаляет строку, и значение ее первичного ключа существует во вторичной таблице, чтобы предотвратить ее удаление (для удаления необходимо сначала удалить соответствующую строку из вторичной таблицы);
  • Первичная таблица изменяет значение первичного ключа, а старое значение существует во вторичной таблице, чтобы предотвратить изменение (для изменения необходимо сначала удалить соответствующую строку вторичной таблицы).

Каскадное исполнение

  • Удалите строки из основной таблицы и удалите связанные строки из таблицы вместе;
  • Главная таблица изменяет значение первичного ключа вместе со значением внешнего ключа связанной строки подчиненной таблицы. Пользователям предоставляется на выбор два метода. Независимо от того, какой метод выбран, в таблице не будет лишних строк. Чтобы понять это под другим углом, используйте знак отклонения того же элемента в подчиненной таблице, чтобы он не соответствовал основной таблице, чтобы добиться согласованности со знаком в основной таблице.
  • Интерфейс: установите два поля выбора для каскадного обновления и каскадного удаления, выберите выполнение каскада, а если не выберите, запретить выполнение;
  • Команда: Установите E) kSCM) E и RESTRICT как две опции: CASCADE означает каскадное выполнение, а RESTRICT означает предотвращение выполнения.

КАСКАД: каскадное удаление

В конце таблицы внешнего ключа добавление каскада удаления - это каскадное удаление

При удалении данных основной таблицы данные подтаблицы, связанные с основной таблицей, также будут удалены.

Так называемое каскадное удаление - это удаление таблицы внешнего ключа одновременно с удалением таблицы первичного ключа.

В приведенном выше примере, если определенный класс в таблице классов удален, то, если вы хотите запросить информацию о классе, соответствующую удаленному номеру класса в таблице учеников, будет сообщено об ошибке, потому что класс больше не существует. Следовательно, при удалении таблицы классов (таблицы первичных ключей) вы должны удалить другие связанные с ней таблицы.Это объясняет роль внешних ключей в поддержании согласованности и целостности данных.. Конечно, с другой стороны, если вы удалите записи в таблице учеников, это не повлияет на данные в таблице класса, и вы сможете правильно запросить номер класса.Следовательно, удаление данных в таблице внешнего ключа не влияет на таблицу первичного ключа.

ОГРАНИЧЕНИЕ: ограничение / ограничение, БЕЗ ДЕЙСТВИЙ (неактивно, по умолчанию)

Если установлено значение «Нет действия» или «Ограничить», при удалении соответствующей записи в таблице первичного ключа сначала проверьте, имеет ли запись соответствующий внешний ключ, и, если есть соответствующий внешний ключ, удаление не допускается.(То есть таблица внешнего ключа ограничивает таблицу первичного ключа)

SET NULL: пустой каскад

В конце таблицы внешнего ключа добавление к удаленному набору null - это пустой каскад

При удалении данных основной таблицы внешний ключ, связанный с основной таблицей, будет установлен в NULL.

Когда значение равно Set Null, при удалении соответствующей записи в таблице первичного ключа сначала проверьте, имеет ли запись соответствующий внешний ключ, если да, установите значение внешнего ключа в подтаблице равным null (то же самое - ограничение таблицы внешних ключей. Таблица первичных ключей, но для этого требуется, чтобы внешний ключ допускал значение null).

Разница между БЕЗ ДЕЙСТВИЯ и ОГРАНИЧЕНИЕМ: только в отдельных случаях приведет к различию, первое выполняется после других ограниченных действий, а второе имеет наивысший приоритет.

нота

При удалении таблицыВы должны сначала удалить дочернюю таблицу, а затем удалить родительскую таблицу, Если вы не используете ограничения casecade для отделения.

При первом удалении родительской таблицы будет сообщено об ошибке: в дочерней таблице есть ключевое поле, связанное с внешними ключами.

Если вы должны сначала удалить родительскую таблицу

Используйте ограничения casecade, чтобы отключить вас и удалить родительскую таблицу



Если вам нужны друзья, вы можете подписаться на мою официальную учетную запись и ответить: электронная книга базы данных, вы можете получить следующие бесплатные материалы в формате PDF

Из статьи вы узнаете, что такое первичный и внешний ключ в SQL. Зачем они нужны и как их использовать. Я покажу на практике как их использовать в PostgreSQL.

Теория

Первичный ключ это одно или несколько полей в таблице. Он необходим для уникальной идентификации любой строки. Первичный ключ накладывает некоторые ограничения:

  • Все записи относящиеся к первичному ключу должны быть уникальны. Это означает, что если первичный ключ состоит из одного поля, то все записи в нём должны быть уникальными. А если первичный ключ состоит из нескольких полей, то комбинация этих записей должна быть уникальна, но в отдельных полях допускаются повторения.
  • Записи в полях относящихся к первичному ключу не могут быть пустыми. Это ограничение в PostgreSQL называется not null.
  • В каждой таблице может присутствовать только один первичный ключ.

К первичному ключу предъявляют следующее требование:

  • Первичный ключ должен быть минимально достаточным. То есть в нем не должно быть полей, удаление которых из первичного ключа не отразится на его уникальности. Это не обязательное требование но желательно его соблюдать.

Первичный ключ может быть:

  • естественным – существует в реальном мире, например ФИО, или номер и серия паспорта;
  • суррогатным – не существует в реальном мире, например какой-то порядковый номер, который существует только в базе данных.

Я сам не имею большого опыта работы с SQL, но в книгах пишут что лучше использовать естественный первичный ключ. Почему именно так, я пока ответить не смогу.

Связь между таблицами

Первостепенная задача первичного ключа – это уникальная идентификация каждой строки. Но первичный ключ может решить ещё одну задачу. В базе данных есть возможность связывания нескольких таблиц. Для такой связи используют первичный и внешний ключ sql. В одной из таблиц создают внешний ключ, который ссылается на поля другой таблицы. Но внешний ключ не может ссылаться на любые поля другой таблицы, а может ссылаться только на определённые:

  • эти поля должны присутствовать и в ссылающейся таблице и в той таблице на которую он ссылается;
  • ссылается внешний ключ из одной таблицы обычно на первичный ключ другой таблицы.

Например, у вас есть таблица “Ученики” (pupils) и выглядит она следующим образом:

ФИО
full_name
Возраст
age
Класс
class
Иванов Иван Иванович15
Сумкин Фёдор Андреевич 15
Петров Алексей Николаевич14
Булгаков Александр Геннадьевич14
Таблица pupils

И есть таблица “Успеваемость” (evaluations):

Предмет
item
ФИО
full_name
Оценка
evaluation
Русский язык Иванов Иван Иванович4
Русский язык Петров Алексей Николаевич5
Математика Булгаков Александр Геннадьевич3
Литература Сумкин Фёдор Андреевич5
Таблица evaluations

В обоих таблицах есть одинаковое поле: ФИО. При этом в таблице “Успеваемость” не может содержаться ФИО, которого нет в таблице “ Ученики“. Ведь нельзя поставить ученику оценку, которого не существует.

Первичным ключом в нашем случае может выступать поле “ФИО” в таблице “ Ученики“. А внешним ключом будет “ФИО” в таблице “Успеваемость“. При этом, если мы удаляем запись о каком-то ученике из таблицы “Ученики“, то все его оценки тоже должны удалиться из таблицы “Успеваемость“.

Ещё стоит заметить что первичный ключ в PostgreSQL автоматически создает индекс. Индекс ускоряет доступ к строкам таблицы и накладывает ограничение на уникальность. То есть двух Ивановых Иванов Ивановичей у нас не может существовать. Чтобы это обойти можно использовать:

  • составной первичный ключ – например, в качестве первичного ключа взять два поля: ФИО и Класс;
  • суррогатный первичный ключ – в таблице “Ученики” добавить поле “№ Ученика” и сделать это поле первичным ключом;
  • добавить более уникальное поле – например, можно использовать уникальный номер зачетной книжки и использовать новое поле в качестве первичного ключа;

Теперь давайте попробуем создать эти две таблички и попробуем с ними поработать.

Практика

Создадим базу данных school и подключимся к ней. Затем создадим таблицу pupils. Про создание таблиц я уже писал тут, а про типы данных тут. Затем посмотрим на табличку с помощью команды \d:

Как вы могли заметить, первичный ключ создаётся с помощью конструкции PRIMARY KEY (имя_поля) в момент создания таблицы.

Вывод команды \d нам показал, что у нас в таблице есть первичный ключ. А также первичный ключ сделал два ограничения:

  • поле full_name, к которому относится первичный ключ не может быть пустым, это видно в колонки Nullable – not null;
  • для поля full_name был создан индекс pupils_pkey с типом btree. Про типы индексов и про сами индексы расскажу в другой статье.

Индекс в свою очередь наложил ещё одно ограничение – записи в поле full_name должны быть уникальны.

Следующим шагом создадим таблицу evaluations:

В этом случае из вывода команды \d вы увидите, что создался внешний ключ (Foreign-key), который относится к полю full_name и ссылается на таблицу pupils.

Внешний ключ создается с помощью конструкции FOREIGN KEY (имя_поля) REFERENCES таблица_на_которую_ссылаются.

Создавая внешний ключ мы дополнительно указали опцию ON DELETE CASCADE. Это означает, что при удалении строки с определённым учеником в таблице pupils, все строки связанные с этим учеником удалятся и в таблице evaluations автоматически.

Заполнение таблиц и работа с ними

Заполним таблицу “pupils“:

Заполним таблицу “evaluations“:

А теперь попробуем поставить оценку не существующему ученику:

Как видите, мы получили ошибку. Вставлять (insert) или изменять (update) в таблице evaluations, в поле full_name можно только те значения, которые есть в этом же поле в таблице pupils.

Теперь удалим какого-нибудь ученика из таблицы pupils:

И посмотрим на строки в таблице evaluations:

Как видно, строка с full_name равная ‘Иванов Иван Иванович’ тоже удалилась. Если бы у Иванова было бы больше оценок, они всё равно бы все удалились. За это, если помните отвечает опция ON DELETE CASCADE.

Попробуем теперь создать ученика с точно таким-же ФИО, как у одного из существующих:

Ничего не вышло, так как такая запись уже существует в поле full_name, а это поле у нас имеет индекс. Значит значения в нём должны быть уникальные.

Составной первичный ключ

Есть большая вероятность, что в одной школе будут учиться два ученика с одинаковым ФИО. Но меньше вероятности что эти два ученика будут учиться в одном классе. Поэтому в качестве первичного ключа мы можем взять два поля, например full_name и class.

Давайте удалим наши таблички и создадим их заново, но теперь создадим их используя составной первичный ключ:

Как вы могли заметить, разница не большая. Мы должны в PRIMARY KEY указать два поля вместо одного. И в FOREIGN KEY точно также указать два поля вместо одного. Ну и не забудьте в таблице evaluations при создании добавить поле class, так как его там в предыдущем варианте не было.

Теперь посмотрим на структуры этих таблиц:

Первичный ключ в таблице pupils уже состоит из двух полей, поэтому внешний ключ ссылается на эти два поля.

Теперь мы можем учеников с одинаковым ФИО вбить в нашу базу данных, но при условии что они будут учиться в разных классах:

И также по второй таблице:

Удаление таблиц

Кстати, удалить таблицу, на которую ссылается другая таблица вы не сможете:

Поэтому удалим наши таблицы в следующем порядке:

Либо мы могли удалить каскадно таблицу pupils вместе с внешним ключом у таблицы evaluations:

Как видно из примера, после каскадного удаления у нас вместе с таблицей pupils удался внешний ключ в таблице evaluations.

Создание связи в уже существующих таблицах

Выше я постоянно создавал первичный и внешний ключи при создании таблицы. Но их можно создавать и для существующих таблиц.

Вначале удалим оставшуюся таблицу:

И сделаем таблицы без ключей:

Теперь создадим первичный ключ в таблице pupils:

И создадим внешний ключ в таблице evaluations:

Посмотрим что у нас получилось:

В этой статье я рассказал про первичный и внешний ключ sql. А также продемонстрировал, как можно создать связанные между собой таблицы и как создать связь между уже существующими таблицами. Вы узнали, какие ограничения накладывает первичный ключ и какие задачи он решает. И вдобавок, какие требования предъявляются к нему. Вместе с тем я показал вам как работать с составным первичным ключом.

первичный ключ и внешний ключ

В прошлой статье (устройство реляционной БД) мы разбирали, как устроена реляционная (табличная) база данных и выяснили, что основными элементами реляционной базы данных являются: таблицы, столбцы и строки, а в математических понятиях: отношения, атрибуты и кортежи. Также часто, строки называют записями, столбцы называют колонками, а пересечение записи и колонки называют ячейкой.

Важно вспомнить, что содержание строки и названия столбцов должны быть уникальны в пределах одной базы данных.

Типы данных в базах

Важно понимать, что можно создавать базы для любых типов данных: текстов, дат, времени, событий, цифр. В зависимости от типа информации реляционные базы данных делят на типы. Каждый тип данных (атрибут) имеет свое обозначение:

Это основные типы данных, которых на самом деле гораздо больше. Причем, каждый язык программирования имеет свой набор системных атрибутов (типов данных).

Что такое первичный ключ и внешний ключ таблиц реляционных баз данных

Первичный ключ

Выше мы вспоминали: каждая строка (запись) БД должна быть уникальна. Именно первичный ключ в виде наборов определенных значений, максимально идентифицируют каждую запись. Можно определить по-другому. Первичный ключ: набор определенных признаков, уникальных для каждой записи. Обозначается первичный ключ, как primary key.

Primary key (PK) очень важен для каждой таблицы. Поясню почему.

  • Primary key не позволяет создавать одинаковых записей (строк) в таблице;
  • PK обеспечивают логическую связь между таблицами одной базы данных (для реляционных БД).

На логической связи между таблицами, стоит остановиться подробнее.

Ключ внешний

Foreign key, кратко FK. Обеспечивает однозначную логическую связь, между таблицами одной БД.

Например, есть две таблицы А и В. В таблице А (обувь), есть первичный ключ: размер, в таблице В (цвет) должна быть колонка с названием размер. В этой таблице «размер» это и будет внешний ключ для логической связи таблиц В и А.

Более сложный пример.

Две таблицы данных: Люди и Номера телефонов.

Таблица: Люди

primary key Имя
1 Зайцев
2 Белкин
3 Волков

Таблица: Номера телефонов

primary key телефон foreign key
1 12345 1
2 54321 1
3 678910 2
4 109876 3
5 13579 3

В таблице Номера телефонов PK уникален. FK этой таблицы является PK таблицы Люди. Связь между номерами телефонов и людьми обеспечивает FK таблицы телефонов. То есть:

В завершении добавлю, что любая СУБД, управляющая базой данных, имеет технические возможности составить первичный ключ.

Читайте также: