#mysql #sql #database #foreign-keys #mariadb
#mysql #sql #База данных #внешние ключи #mariadb
Вопрос:
Я работаю над MariaDB (это то же самое, что и работа с MySQL).
У меня возникла некоторая проблема при попытке установить 2 ограничения внешнего ключа для 2 полей таблицы, которая реализует отношение «многие ко многим» между 2 таблицами.
Итак, у меня есть следующие таблицы:
-
РАЗМЕЩЕНИЕ: каждая запись представляет отель и содержит следующие поля:
Field Type Null Key Default Extra --------------------------------------------------------------------------------------------------------------------------- id bigint(20) unsigned NO PRI auto_increment user_id bigint(20) unsigned NO accomodation_name varchar(100) NO description text YES nation varchar(100) YES region varchar(100) YES province varchar(100) YES city varchar(100) YES stars int(10) unsigned YES geographical_position point YES accomodation_typological_id bigint(20) unsigned YES MUL accomodation_service_id bigint(20) YES
-
СЕРВИС: где каждая запись представляет одну услугу, предоставляемую отелем предыдущей таблицы:
Field Type Null Key Default Extra --------------------------------------------------------------------------------------------------------------------------- id bigint(20) NO PRI auto_increment description varchar(255) NO
Затем я создал таблицу ACCOMODATION_SERVICE, которая реализует связь «многие ко многим» между предыдущими 2 таблицами, это поля:
Field Type Null Key Default Extra
---------------------------------------------------------------------------------------------------------------------------
id bigint(20) unsigned NO PRI auto_increment
accomodation_id bigint(20) unsigned NO MUL
service_id bigint(20) unsigned NO
Итак, в поле accommodation_id этой таблицы я ввожу идентификатор таблицы размещения, а в service_id этой таблицы я ввожу идентификатор таблицы обслуживания.
Как я могу правильно указать, что эти 2 поля должны быть внешними ключами для таблиц размещения и обслуживания? Я думаю, что я должен указать это ссылочное ограничение.
Комментарии:
1. Просто как примечание: отношение «многие ко многим» (обычно) не имеет дополнительного идентификатора. Вы можете использовать таблицу
accomodation_id, service_id
, в которой оба столбца вместе являются первичным ключом.
Ответ №1:
Вам нужно сделать
ALTER TABLE accomodation_service ADD CONSTRAINT fk_accomodation_id FOREIGN KEY(accomodation_id) REFERENCES accomodate(id)
И аналогично
ALTER TABLE accomodation_service ADD CONSTRAINT fk_service_id FOREIGN KEY(accomodationfk_service_id_id) REFERENCES service(id)
Ответ №2:
Для вашей сводной таблицы
CREATE TABLE accommodation_service(
id ............,
accommodation_id ............,
service_id ............,
FOREIGN KEY (accommodation_id)
REFERENCES accommodation(id)
ON DELETE CASCADE,
FOREIGN KEY (service_id)
REFERENCES service(id)
ON DELETE CASCADE,
)
Я думаю, что это шаблон, который вы ищете.