нужно некоторое объяснение об ограничении внешнего ключа - PullRequest
0 голосов
/ 03 ноября 2019

Я использую Symfony 4, и когда я делаю ссылки между таблицами, создаются индексы. Я не понимаю, как они работают.

enter image description here

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

Спасибо

Ответы [ 3 ]

1 голос
/ 03 ноября 2019

MySQL - это система реляционных баз данных. Если есть связь между двумя таблицами, она существует по причине. Подумайте о своих сущностях в Symfony. Если один объект (основной объект) имеет несколько связанных объектов, и эти связанные объекты могут существовать только при наличии основного объекта, тогда должно существовать ограничение для предотвращения потерянных записей.

Например: Рассмотрим отношения между компаниями и подразделениями. Компания может иметь 0 или более подразделений, но подразделение может существовать только как часть компании. В этом случае запись в таблице деления будет иметь ссылку на запись в таблице компании. Однако запись в таблице компании не будет иметь прямой ссылки в MySQL на какие-либо записи в таблице деления.

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

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

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

Исходя из информации на предоставленном изображении, каждая запись в импортируемом файле должна иметь значение для scoring_id, которое равно (предположительно) полю id в таблице оценки. Если есть какая-то другая часть данных, которую можно использовать для связи двух таблиц, используйте ее и настройте свои объекты соответствующим образом.

1 голос
/ 03 ноября 2019

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

Что вы можете сделать для импорта временно

использовать FOREIGN_KEY_CHECKS

Перед импортом выполните

SET FOREIGN_KEY_CHECKS=0;

и Когда оно закончится

SET FOREIGN_KEY_CHECKS=1;

Или

используйте DISABLE KEYS:

ALTER TABLE table_name DISABLE KEYS;

и после завершения импорта:

ALTER TABLE table_name ENABLE KEYS;

Конечно, вам нужно изменить имя_таблицы

1 голос
/ 03 ноября 2019

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

При использовании импорта, если этот ключ не существует в другой таблице, будет импортирован mysql импортошибки

Если убрать флаг FOREIGN KEY, вы сможете импортировать эту таблицу

, см. Руководство по MYSQL

для внешних ключей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...