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

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

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

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