Ассоциативная сущность — это термин, используемый в реляционной и теории сущности–связи . Реляционная база данных требует реализации базового отношения (или базовой таблицы ) для разрешения отношений «многие ко многим» . Базовое отношение, представляющее этот тип сущности, неформально называется ассоциативной таблицей .
Как упоминалось выше, ассоциативные сущности реализуются в структуре базы данных с использованием ассоциативных таблиц, которые представляют собой таблицы, которые могут содержать ссылки на столбцы из одной и той же или разных таблиц базы данных в пределах одной и той же базы данных.
Ассоциативная (или соединительная) таблица сопоставляет две или более таблиц вместе, ссылаясь на первичные ключи (PK) каждой таблицы данных. По сути, она содержит ряд внешних ключей (FK), каждый из которых находится в отношении «многие к одному» от соединительной таблицы к отдельным таблицам данных. PK ассоциативной таблицы обычно состоит из самих столбцов FK.
Ассоциативные таблицы в разговорной речи известны под многими названиями, включая таблицу ассоциаций , таблицу мостов , таблицу перекрестных ссылок , пешеходный переход , промежуточную таблицу , таблицу пересечений , таблицу соединений , таблицу соединений , таблицу связей , решатель отношений «многие ко многим» , таблицу карт , таблицу отображений , таблицу пар , сводную таблицу (как используется в Laravel — не путать с использованием сводной таблицы в электронных таблицах ) или таблицу переходов .
Примером практического использования ассоциативной таблицы может быть назначение разрешений пользователям. Может быть несколько пользователей, и каждому пользователю может быть назначено ноль или более разрешений. Отдельные разрешения могут быть предоставлены одному или нескольким пользователям.
CREATE TABLE Users ( UserLogin varchar ( 50 ) PRIMARY KEY , UserPassword varchar ( 50 ) NOT NULL , UserName varchar ( 50 ) NOT NULL ); CREATE TABLE Разрешения ( PermissionKey varchar ( 50 ) PRIMARY KEY , PermissionDescription varchar ( 500 ) NOT NULL ); -- Это соединительная таблица. CREATE TABLE UserPermissions ( UserLogin varchar ( 50 ) REFERENCES Users ( UserLogin ), PermissionKey varchar ( 50 ) REFERENCES Permissions ( PermissionKey ), PRIMARY KEY ( UserLogin , PermissionKey ) );
Оператор SELECT для соединительной таблицы обычно включает соединение основной таблицы с соединительной таблицей:
ВЫБЕРИТЕ * ИЗ Пользователи ПРИСОЕДИНЯЙТЕСЬ к разрешениям пользователя USING ( UserLogin );
Это вернет список всех пользователей и их разрешений.
Вставка в соединительную таблицу включает несколько этапов: сначала вставка в основную таблицу(ы), затем обновление соединительной таблицы.
-- Создание нового пользователя INSERT INTO Users ( UserLogin , UserPassword , UserName ) VALUES ( 'SomeUser' , 'SecretPassword' , 'UserName' ); -- Создание нового разрешения INSERT INTO Permissions ( PermissionKey , PermissionDescription ) VALUES ( 'TheKey' , 'Ключ, используемый для нескольких разрешений' ); -- Наконец, обновляем соединение INSERT INTO UserPermissions ( UserLogin , PermissionKey ) VALUES ( 'SomeUser' , 'TheKey' );
Используя внешние ключи, база данных автоматически разыменует значения таблицы UserPermissions в своих собственных таблицах.