Модуль CerberCrypt: Поиск битых SQL-связей

Материал из BiTel WiKi

Версия от 11:52, 20 мая 2011; DimOn (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Здесь приведены некоторые запросы, которые помогут найти битые связи в структуре БД модуля 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". Только не удалите всё из полных списков, т.е. первые три запроса :)

Личные инструменты