Как я могу правильно установить ограничение 2 внешних ключей для этой таблицы, реализующее связь «многие ко многим» между 2 таблицами?

#mysql #sql #database #foreign-keys #mariadb

#mysql #sql #База данных #внешние ключи #mariadb

Вопрос:

Я работаю над MariaDB (это то же самое, что и работа с MySQL).

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

Итак, у меня есть следующие таблицы:

  1. РАЗМЕЩЕНИЕ: каждая запись представляет отель и содержит следующие поля:

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

      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,

)
  

Я думаю, что это шаблон, который вы ищете.