Ваша операция «проверить все foreignKeys
против всех tables
» может быть записана в одну строку.
function checkAllFK(tables, foreignKeys) {
return Promise.all(tables.map(t => Promise.all(foreignKeys.map(k => QueryFunction(t, k))));
}
Эта функция возвращает обещание, которое разрешается после выполнения всех запросов, поэтому вы вызываете егокак
checkAllFK(tables, foreignKeys)
.then(/* success */)
.catch(/* error */);
Однако, в зависимости от количества foreignKeys
и tables
и сложности QueryFunction
, это может создать огромную нагрузку на сервер базы данных.Если имеется 10 таблиц и 1000 внешних ключей, это попыталось бы выполнить 10000 запросов параллельно к серверу базы данных.Это не очень разумно.
SQL создан для решения этих ситуаций.Вместо того, чтобы выполнять 10000 запросов для одной вещи каждый, вы можете решить выполнить один запрос для 10000 вещей.Или 10 запросов на 1000 вещей каждый.Оба, очевидно, лучше, чем забивать сервер базы данных 10 000 запросов.
Например, это возвращает все внешние ключи, которые не существуют в table_1
за один шаг.
SELECT
k.key_column
FROM
foreign_keys k
LEFT JOIN table_1 t ON t.key_column = k.key_column
WHERE
t.key_column IS NULL
Зависит отна то, что вы делаете в своем QueryFunction
, как должен выглядеть фактический SQL.
Тот факт, что у вас есть более одной таблицы для проверки одних и тех же внешних ключей, также вызывает беспокойство, это обычно является признакомплохой дизайн базы данных.