В MySQL, как я могу загрузить несколько таблиц из одной таблицы при сохранении ссылочной целостности? - PullRequest
0 голосов
/ 10 ноября 2010

ОБНОВЛЕНИЕ:"Установка атрибута 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

1 Ответ

1 голос
/ 10 ноября 2010

Я бы загрузил все файлы в промежуточную базу данных со следующими таблицами:

Temp_Employee (nId, name) Temp_Office (nId, number) ...

Не было бы никаких ограничений илиФК на этих столах.Если записи загружены, вы можете добавить идентификаторы для записей, проверить целостность и затем переместить их в действующую базу данных (отключение fks, перемещение данных, повторное включение fks)

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