Модуль CerberCrypt: Поиск битых SQL-связей
Материал из BiTel WiKi
(Различия между версиями)
DimOn (Обсуждение | вклад) (Новая страница: «<source lang="sql"># список пакетов #SELECT * FROM packet_43 # список юзеркарт #SELECT * FROM user_card_43 # список карт #SELEC…») |
DimOn (Обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
- | <source lang="sql"># список пакетов | + | Здесь приведены некоторые запросы, которые помогут найти битые связи в структуре БД модуля CerberCrypt. Некоторые из них возникают из-за ошибки программной, некоторые из-за того, что когда-то не было проверки целостности некоторых связей. В любом случае, эти ошибки ведут к неправильной логике, например, наличие user_card с битой ссылкой на договор не даёт в некоторых случаях нормально обновлять договор для сущности card. |
- | + | <source lang="sql"> | |
+ | # список пакетов | ||
+ | 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 | # картпакеты с битой ссылкой на 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 с битой ссылкой на договор | # user_card с битой ссылкой на договор | ||
- | + | SELECT * FROM user_card_43 where cid not in (SELECT id FROM contract ) | |
# user_card с битой ссылкой на карту | # user_card с битой ссылкой на карту | ||
- | + | SELECT * FROM user_card_43 where number not in (SELECT number FROM card_43 ) | |
</source> | </source> | ||
+ | Здесь везде 43 нужно заменить на MID вашего модуля. После анализа возможных битых данных можно (нужно) удалить их, заменив "SELECT *" на "DELETE". Только не удалите всё из полных списков, т.е. первые три запроса :) |
Версия 11:52, 20 мая 2011
Здесь приведены некоторые запросы, которые помогут найти битые связи в структуре БД модуля 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". Только не удалите всё из полных списков, т.е. первые три запроса :)