Чтобы очистить / заполнить таблицу за таблицей в правильном порядке, могу ли я просто отсортировать все таблицы на основе FK?

Это больше похоже на концептуальный вопрос.

У меня запланированное задание со многими входными таблицами (SQLite) table1 ... tableN и мне нужно выполнить серию удаления / вставки в MySQL, обрабатывая таблицу за таблицей.

READ SQLITE TABLE -> EMPTY MYSQL TABLE -> FILL MYSQL TABLE

Конечно, если (MySQL) table1 имеет внешний ключ, указывающий на table2, table2 должны быть удалены и заполнены до table1, Я вручную сортирую входящие таблицы, но это не очень хорошая идея с таблицей 30+ и может привести к ошибкам.

SET FOREIGN_KEY_CHECKS = 0 является не вариант.

Таким образом, проблема будет заключаться в сортировке всей таблицы MySQL по количеству входящих FK (от высокой к низкой), например:

// Doctrine DBAL example but it's easily understandable
$schema = $this->connection->getSchemaManager();

// Init chart where keys are table names, values are # of incoming FKs
$chart = array_fill_keys($schema->listTableNames(), 0);

// Build the chart
foreach ($schema->listTables() as $table) {
foreach ($table->getForeignKeys() as $foreignKey) {
$chart[$foreignKey->getForeignTableName()]++;
}
}

// Sort high to low by values
arsort($chart);

Есть ли недостатки в моих рассуждениях? Мой вопрос как бороться с само-чужими ключами (просто игнорировать это?) и как иметь дело с циркулярными ссылками (Т.е. table1 -> table2 -> table3 -> table1).

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]