Как сделать составной ключ в аксесс

Обновлено: 08.07.2024

CREATE TABLE Orders ( OrderID int NOT NULL, OrderNumber int NOT NULL, PersonID int, PRIMARY KEY (OrderID), FOREIGN KEY (PersonID) REFERENCES Persons(PersonID) );

SQL Server / Oracle / MS Access:

CREATE TABLE Orders ( OrderID int NOT NULL PRIMARY KEY, OrderNumber int NOT NULL, PersonID int FOREIGN KEY REFERENCES Persons(PersonID) );

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

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders ( OrderID int NOT NULL, OrderNumber int NOT NULL, PersonID int, PRIMARY KEY (OrderID), CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID) REFERENCES Persons(PersonID) );

Видео

Разрешения Permissions

Создание новой таблицы с внешним ключом требует разрешения CREATE TABLE в базе данных и разрешения ALTER на схему, в которой создается таблица. Creating a new table with a foreign key requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

Создание внешнего ключа в существующей таблице требует разрешения ALTER на таблицу. Creating a foreign key in an existing table requires ALTER permission on the table.

Определение первичного ключа в Access с помощью имеющихся полей

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

Откройте базу данных, которую нужно изменить.

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

Совет: Если область навигации не отображается, нажмите клавишу F11.

Выберите поле или поля, которые требуется использовать в качестве первичного ключа.

Чтобы выделить одно поле, щелкните область выделения строки нужного поля.

Чтобы при создании составного ключа выделить несколько полей, щелкните область выделения для каждого поля, удерживая нажатой клавишу CTRL.

На вкладке Конструктор в группе Элементы нажмите кнопку Ключевое поле.

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

Изменение первичного ключа в Access

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

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

Определите первичный ключ в соответствии с инструкциями в разделе Определение первичного ключа.

Ключи и индексы

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

Создание файла базы данных

При запуске Access открывается диалоговое окно — Окно запуска, в котором предлагается создать новую БД, запустить Мастера БД или открыть существую­щую БД.

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

Вниманию студентов! Студенческие БД должны создаваться в директории Student/GRNNN.


Для создания БД можно восполь­зоваться Мастером базы данных, уста­новив в окне запуска флажок Мастера, страницы и проекты. Мастер создает БД, содержащую все необходимые объ­екты, и остается только ввести в табли­цы данные. Это простейший способ на­чального создания БД, но в этом случае придется пользоваться шаблоном, пред­лагающим определенную структуру БД. Мастера баз данных нельзя использо­вать для добавления новых таблиц, форм, отчетов в уже существующую БД.

Флажок Открыть базу данных окна запуска позволяет открыть ранее

созданную БД, выбрав ее имя из предлагаемого списка. При выборе Другие файлы предоставляется каталог, из которого можно открыть нужную БД.

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

Отсутствие упорядоченности кортежей.

Отсутствие упорядоченности атрибутов. Для ссылки на значение атрибута всегда используется имя атрибута.

Атомарность значений атрибутов, т.е. среди значений домена не могут содержаться множества значений (отношения ).

Реляционные базы данных состоят из нескольких таблиц, связь между которыми устанавливается с помощью совпадающих полей. Каждая запись в таблицах идентифицирует один объект . Отношение между объектами определяет отношение между таблицами. Существует 4 типа отношений:

  • Отношение "один-к-одному" (1:1) означает, что каждая запись в одной таблице соответствует только одной записи в другой таблице.
  • Отношение "один-ко-многим" (1 :М) означает, что каждой записи в одной таблице соответствует одна или несколько записей в другой таблице.
  • Отношение "многие-к-одному" (М:1) аналогично рассмотренному ранее типу "один-ко-многим". Тип отношения между объектами зависит от вашей точки зрения.
  • Отношение "многие-ко-многим" (М:М). возникает между двумя таблицами в тех случаях, когда каждой запись в одной таблице соответствует 0, 1, 2 и более записей в другой таблице и наоборот.

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

Пример 5.10 Дана совокупность информационных объектов, отражающих учебный процесс в вузе:

СТУДЕНТ (Номер, Фамилия, Имя, Отчество, Пол, Дата рождения, Группа ) СЕССИЯ (Номер, Оценка1, Оценка2, ОценкаЗ, Оценка4, Результат) СТИПЕНДИЯ (Результат, Процент ) ПРЕПОДАВАТЕЛЬ (Код преподавателя. Фамилия, Имя, Отчество)

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

Графическое изображение реального отношения 1:1

Пример 5.11 Примером связи 1:1 может служить связь между информационными объектами СТУДЕНТ и СЕССИЯ:

СТУДЕНТ СЕССИЯ Каждый студент имеет определенный набор экзаменационных оценок в сессию.

При связи один ко многим (1:М) одному экземпляру информационного объекта А соответствует 0, 1 или более экземпляров объекта В, но каждый экземпляр объекта В связан не более чем с 1 экземпляром объекта А. Графически данное соответствие имеет вид, представленный на рис. 5.6.

Графическое изображение реального отношения 1:М

Пример 5.12 Примером связи 1 :М служит связь между информационными объектами СТИПЕНДИЯ и СЕССИЯ:

СТИПЕНДИЯ Связь многие ко многим (М:М) предполагает, что в каждый момент времени одному экземпляру информационного объекта А соответствует 0, 1 или более экземпляров объекта В и наоборот. На рис. 5.7 графически представлено указанное соответствие.

Графическое изображение реального отношения М:М

Пример 5.13 Примером данного отношения служит связь между информационными объектами СТУДЕНТ и ПРЕПОДАВАТЕЛЬ:

Один студент обучается у многих преподавателей, один преподаватель обучает многих студентов.

Простые и составные ключи

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

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

Все остальные ключи отношения называются возможными ключами .

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

База данных о подразделениях и сотрудниках предприятия

Например, связь между отношениями ОТДЕЛ и СОТРУДНИК создается путем копирования первичного ключа "Номер_отдела" из первого отношения во второе. Таким образом:

  • для того, чтобы получить список работников данного подразделения, необходимо из таблицы ОТДЕЛ установить значение атрибута "Номер_отдела", соответствующее данному "Наименованию_отдела" выбрать из таблицы СОТРУДНИК все записи, значение атрибута "Номер_отдела" которых равно полученному на предыдущем шаге.
  • для того, чтобы узнать в каком отделе работает сотрудник, нужно выполнить обратную операцию:
    • определяем "Номер_отдела" из таблицы СОТРУДНИК
    • по полученному значению находим запись в таблице ОТДЕЛ.

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

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

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

    Краткие итоги

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

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

    Реляционные базы данных состоят из нескольких таблиц, связь между которыми устанавливается с помощью совпадающих полей. Каждая запись в таблицах идентифицирует один объект . Отношение между объектами определяет отношение между таблицами. Существует 4 типа отношений:

    • Отношение "один-к-одному" (1:1)означает, что каждая запись в одной таблице соответствует только одной записи в другой таблице.
    • Отношение "один-ко-многим" (1 :М)означает, что каждой записи в одной таблице соответствует одна или несколько записей в другой таблице.
    • Отношение "многие-к-одному" (М:1)аналогично рассмотренному ранее типу. Тип отношения между объектами зависит от вашей точки зрения.
    • Отношение "многие-ко-многим" (М:М).возникает между двумя таблицами в тех случаях, когда:

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

    Из статьи вы узнаете, что такое первичный и внешний ключ в 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. А также продемонстрировал, как можно создать связанные между собой таблицы и как создать связь между уже существующими таблицами. Вы узнали, какие ограничения накладывает первичный ключ и какие задачи он решает. И вдобавок, какие требования предъявляются к нему. Вместе с тем я показал вам как работать с составным первичным ключом.

    внешний ключ базы данных

    Изучение

    Эта статья написана Бриттни Паркер, писателем из Girls Write Tech, которая специализируется на написании технических материалов. Они стремятся побудить больше женщин-разработчиков делиться своими знаниями.

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

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

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

    Сегодня это руководство познакомит вас с внешними ключами и покажет, как их использовать в SQL.

    Что такое внешний ключ в базе данных?

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

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

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

    Столбец, действующий как внешний ключ, должен иметь соответствующее значение в связанной таблице. Это создает ссылочную целостность.

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

    Скажем, у нас есть две таблицы с

    Скажем, у нас есть две таблицы с именами customerи order. Мы можем использовать внешний ключ для создания связи между ними. В ordersтаблице мы создаем ключ, который ссылается на клиента (т.е. CUSTOMER_ID) в другой таблице.

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

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

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

    Ограничение FK

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

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

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

    • Каскад: при удалении значений первичного ключа удаляется соответствующий столбец в дочерней таблице.
    • Установить ноль: когда указанная строка удаляется / изменяется, ссылочные значения во внешнем ключе устанавливаются равными нулю.
    • Ограничить: значения в родительской таблице нельзя удалить, если на них ссылается внешний ключ.
    • Установить по умолчанию: для значений внешнего ключа в дочерней таблице устанавливается значение по умолчанию, если родительская таблица изменена / удалена.

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

    • Используется CONSTRAINTзначение символа, и оно должно быть уникальным в базе данных.
    • Для таблиц InnoDB имя ограничения создается автоматически, если условие символа ограничения не определено.
    • Для таблиц NDB используется FOREIGN KEY index_nameзначение или автоматически создается имя ограничения.

    Внешний ключ против первичного ключа

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

    Внешние ключи используются больше как ссылка, чем как уникальный идентификатор конкретной строки или записи.

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

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

    Внешний ключ против составного ключа

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

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

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

    Ссылочные действия внешнего ключа

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

    Эти ссылочные действия усиливают целостность структуры таблицы, снижая вероятность ошибки, гарантируя, что ссылочные столбцы содержат только уникальные наборы значений.

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

    Совет: передовой опыт указывает на использование NOT NULLограничения при создании внешних ключей для поддержания структурной целостности базы данных.

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

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

    Внешние ключи в SQL и MySQL

    Узнайте больше о различных типах баз данных здесь

    Следующий синтаксис позволяет нам назвать ограничение FOREIGN KEY:

    Реальный пример SQL

    А теперь давайте уточним. Ниже Actorsтаблица является таблицей, на которую ссылаются, и называется родительской таблицей. Здесь справочная таблица DigitalAssetsявляется дочерней таблицей.

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

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

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

    Идентификатор менеджера будет ссылаться на идентификатор сотрудника в том же столбце, а идентификатор сотрудника будет действовать как внешний ключ.

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