Прежде чем начинать работать с деревом, что бы линий раз не наступать на «грабли», определим основные правила:
Можно определить проверочные запросы:
Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк;
Получаем количество записей (узлов), минимальный левый ключ и максимальный правый ключ, проверяем значения.
Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк;
Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк;
Здесь, я думаю, потребуется некоторое пояснение запроса. Выборка по сути осуществляется из одной таблицы, но в разделе FROM эта таблица "виртуально" продублирована 3 раза: из первой мы выбираем все записи по порядку и начинаем сравнивать с записями второй таблицы (раздел WHERE) в результате мы получаем все записи неповторяющихся значений. Для того, что бы определить сколько раз запись не повторялась в таблице, производим группировку (раздел GROUP BY) и получаем число "не повторов" (COUNT(t1.id)). По условию, если все ключи уникальны, то число не повторов будет меньше на одну единицу чем общее количество записей. Для того, чтобы определить количество записей в таблице, берем максимальный правый ключ (MAX(t3.right_key)), так как его значение - двойное число записей, но так как в условии отбора для записи с максимальным правым ключом - максимальный правый ключ будет другим, вводится третья таблица, при этом число "неповторов" увеличивается умножением его на количество записей. SQRT(4*rep +1) - решение уравнения x^2 + x = rep. Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк. Но сразу хочу оговориться, что данный запрос весьма ресурсоемкий, и при большом количестве узлов скорость его выполнения будет очень медленной а нагрузка на сервер - высокая, поэтому, я лично, данный запрос не использую, предпочитая несколько простых и обработку результатов в программе.
Примечание: Хотя данные проверки не дают 100% гарантии, но определит большее количество ошибок.