Модуль CerberCrypt: Поиск битых SQL-связей
Материал из BiTel WiKi
Здесь приведены некоторые запросы, которые помогут найти битые связи в структуре БД модуля CerberCrypt. Некоторые из них возникают из-за ошибки программной, некоторые из-за того, что когда-то не было проверки целостности некоторых связей. В любом случае, эти ошибки ведут к неправильной логике, например, наличие user_card с битой ссылкой на договор не даёт в некоторых случаях нормально обновлять договор для сущности card.
# список пакетов SELECT * FROM packet_43 # список юзеркарт SELECT * FROM user_card_43 # список карт SELECT * FROM card_43 ORDER BY number # картпакеты с битой ссылкой на договор SELECT * FROM card_packet_43 WHERE cid NOT IN (SELECT id FROM contract ) # картпакеты с битой ссылкой на user_card SELECT * FROM card_packet_43 WHERE ucid NOT IN (SELECT id FROM user_card_43 ) # картпакеты с битой ссылкой на пакет SELECT * FROM card_packet_43 WHERE pid NOT IN (SELECT id FROM packet_43 ) # user_card с битой ссылкой на договор SELECT * FROM user_card_43 WHERE cid NOT IN (SELECT id FROM contract ) # user_card с битой ссылкой на карту SELECT * FROM user_card_43 WHERE number NOT IN (SELECT number FROM card_43 )
Здесь везде 43 нужно заменить на MID вашего модуля. После анализа возможных битых данных можно (нужно) удалить их, заменив "SELECT *" на "DELETE". Только не удалите всё из полных списков, т.е. первые три запроса :)