Первичный ключ и внешний ключ: в чем разница?

Содержание:

Anonim

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

Что такое ключи?

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

Что такое отношения с базой данных?

Отношения с базой данных - это ассоциации между одной или несколькими таблицами, созданными с помощью операторов соединения. Он используется для эффективного извлечения данных из базы данных. В основном существует три типа отношений: 1) один-к-одному, 2) один-ко-многим, 3) многие-ко-многим.

Что такое первичный ключ?

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

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

Что такое внешний ключ?

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

КЛЮЧЕВЫЕ ОТЛИЧИЯ:

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

Зачем использовать первичный ключ?

Вот минусы / преимущества использования первичного ключа:

  • Основная цель первичного ключа - идентифицировать каждую запись в таблице базы данных.
  • Вы можете использовать первичный ключ, если не разрешаете кому-либо вводить нулевые значения.
  • Если вы удалите или обновите записи, будет предпринято указанное вами действие для обеспечения целостности данных.
  • Выполните операцию ограничения, чтобы отклонить операцию удаления или обновления для родительской таблицы.
  • Когда вы физически организуете таблицу СУБД, данные упорядочиваются в виде последовательности кластеризованного индекса.

Зачем использовать внешний ключ?

Вот важные причины использования внешнего ключа:

  • Внешние ключи помогают переносить объекты с использованием первичного ключа из родительской таблицы.
  • Внешний ключ позволяет связать две или более таблиц вместе.
  • Это делает данные вашей базы данных непротиворечивыми.
  • Внешний ключ может использоваться для сопоставления столбца или комбинации столбцов с первичным ключом в родительской таблице.
  • Ограничение внешнего ключа SQL используется для обеспечения соответствия ссылочной целостности родительских данных значениям в дочерней таблице.

Пример первичного ключа

Синтаксис:

Ниже приведен синтаксис первичного ключа:

CREATE TABLE (Column1 datatype,Column2 datatype, PRIMARY KEY (Column-Name).);

Здесь,

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

Пример:

StudID Ролл Нет Имя Фамилия Электронное письмо
1 11 Том Цена Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
2 12 Ник Райт Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
3 13 Дана Натан Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

В приведенном выше примере мы создали таблицу студентов с такими столбцами, как StudID, Roll No, First Name, Last Name и Email. StudID выбран в качестве первичного ключа, поскольку он может однозначно идентифицировать другие строки в таблице.

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

Синтаксис:

Ниже приведен синтаксис внешнего ключа:

CREATE TABLE 
(column1 datatype,column2 datatype,constraint (name of constraint)FOREIGN KEY [column1, column2… ]REFERENCES [primary key table name] (List of primary key table column)… );

Здесь,

  • Параметр Table Name указывает имя таблицы, которую вы собираетесь создать.
  • Параметры column1, column2… отображают столбцы, которые необходимо добавить в таблицу.
  • Ограничение обозначает имя создаваемого ограничения.
  • Ссылки указывают на таблицу с первичным ключом.

Пример:

DeptCode DeptName
001 Наука
002 английский
005 Компьютер
ID учителя Fname Lname
B002 Дэйвид Warner
B017 Сара Джозеф
B009 Майк Брантон

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

В этой таблице, добавив внешний ключ в Deptcode к имени Учителя, мы можем создать связь между двумя таблицами.

ID учителя DeptCode Fname Lname
B002 002 Дэйвид Warner
B017 002 Сара Джозеф
B009 001 Майк Брантон

Эта концепция также известна как ссылочная целостность.

Разница между первичным ключом и внешним ключом

Вот важное различие между первичным ключом и внешним ключом:

Первичный ключ Иностранный ключ
Ограничение первичного ключа - это столбец или группа столбцов, которые однозначно идентифицируют каждую строку в таблице системы управления реляционной базой данных. Внешний ключ - это столбец, который создает связь между двумя таблицами.
Это поможет вам однозначно идентифицировать запись в таблице. Это поле в таблице, которое является первичным ключом другой таблицы.
Первичный ключ никогда не принимает нулевые значения. Внешний ключ может принимать несколько значений NULL.
Первичный ключ - это кластерный индекс, а данные в таблице СУБД физически организованы в последовательности кластеризованного индекса. Внешний ключ не может автоматически создавать индекс, кластеризованный или некластеризованный.
Вы можете иметь единственный первичный ключ в таблице. В таблице может быть несколько внешних ключей.
Значение первичного ключа нельзя удалить из родительской таблицы. Значение внешнего ключа можно удалить из дочерней таблицы.
Вы можете неявно определить первичный ключ во временных таблицах. Вы не можете определять внешние ключи для локальных или глобальных временных таблиц.
Первичный ключ - это кластерный индекс. По умолчанию это не кластерный индекс.
Никакие две строки не могут иметь одинаковые значения первичного ключа. Внешний ключ может содержать повторяющиеся значения.
Нет ограничений на вставку значений в столбец таблицы. Вставляя любое значение в таблицу внешнего ключа, убедитесь, что значение присутствует в столбце первичного ключа.