ОБНОВЛЕНИЕ:"Установка атрибута foreign_key_checks в 1 не запускает сканирование существующих данных таблицы. Поэтому строки, добавленные в таблицу, когда foreign_key_checks = 0, не будут проверены на согласованность." ИСТОЧНИК: 5.1.4. Системные переменные сервера - foreign_key_checks - В результате кажется, что отключение foreign_key_checks НЕ является опцией ...
Необходимо загрузить данные из одного файла с более чем 100 000 записей в несколько таблиц на MySQL, поддерживая отношения, определенные в файле / таблицах; это означает, что отношения уже совпадают. Решение должно работать на последней версии MySQL и может использовать механизм InnoDB или MyISAM.
Я абсолютно новичок во всем этом, и у меня очень мало опыта автоматической генерации идентификаторов и установления отношений с внешними ключами. Любые указатели будут оценены.
См. Примечание ОБНОВЛЕНИЕ выше: Я мог бы добавить, что нет необходимости делать обновления в действующей базе данных, то есть все в порядке, чтобы отключить ограничения внешнего ключа, а затем выполнить вставки , включите ограничения снова. Поскольку я понимаю, что если что-то не так с ссылочной целостностью базы данных, операция завершится неудачно.
Все подходы должны включать некоторые методы проверки и стратегию отката / очистки в случае сбоя вставки или неспособности сохранить ссылочную целостность.
Опять же, совершенно новичок в этом деле и делаю все возможное, чтобы предоставить как можно больше информации, если у вас есть какие-либо вопросы или просьба дать разъяснения - просто дайте мне знать.
Спасибо!
ОБРАЗЕЦ ДАННЫХ: Чтобы лучше проработать пример, предположим, что я пытаюсь загрузить файл, содержащий имя сотрудника, должности, которые они занимали в прошлом, и историю их должностей, разделенных вкладкой.
Файл:
EmployeeName<tab>OfficeHistory<tab>JobLevelHistory
John Smith<tab>501<tab>Engineer
John Smith<tab>601<tab>Senior Engineer
John Smith<tab>701<tab>Manager
Alex Button<tab>601<tab>Senior Assistant
Alex Button<tab>454<tab>Manager
ПРИМЕЧАНИЕ: База данных с одной таблицей полностью нормализована (насколько может быть одна таблица) - и, например, в случае с «Джоном Смитом» есть только один Джон Смит; Это означает, что нет дубликатов, которые могли бы привести к конфликтам в ссылочной целостности.
Схема базы данных MyOffice
имеет следующие таблицы:
Employee (nId, name)
Office (nId, number)
JobTitle (nId, titleName)
Employee2Office (nEmpID, nOfficeId)
Employee2JobTitle (nEmpId, nJobTitleID)
Как я могу использовать MySQL для загрузки файла в схему выше Автоматическая генерация идентификаторов для Employee, Office и JobTitle и поддержание отношений между работником и офисами, а также сотрудниками и должностями?
Так и в этом случае. таблицы должны выглядеть так:
Employee
1 John Smith
2 Alex Button
Office
1 501
2 601
3 701
4 454
JobTitle
1 Engineer
2 Senior Engineer
3 Manager
4 Senior Assistant
Employee2Office
1 1
1 2
1 3
2 2
2 4
Employee2JobTitle
1 1
1 2
1 3
2 4
2 3