В MySQL, как я могу загрузить несколько таблиц из одной таблицы при сохранении ссылочной целостности?
ОБНОВЛЕНИЕ: "Установка атрибута foreign_key_checks на 1 не запускает сканирование существующих данных таблицы. Поэтому строки, добавленные в таблицу, когда foreign_key_checks = 0, не будут проверены на согласованность". ИСТОЧНИК: 5.1.4. Системные переменные сервера - foreign_key_checks - В результате кажется, что отключение foreign_key_checks НЕ является опцией...
Необходимо загрузить данные из одного файла с более чем 100000 записей в несколько таблиц на 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
1 ответ
Я хотел бы загрузить все файлы в промежуточную базу данных со следующими таблицами:
Temp_Employee (nId, name) Temp_Ompiceee (nId, number) ...
На этих столах не было бы никаких ограничений или ФК. Если записи загружены, то вы можете добавить идентификаторы для записей, проверить целостность и затем переместить их в действующую базу данных (отключение fks, перемещение данных, повторное включение fks)