Публикация родословной кошек через рекуррентный запрос к БД

[02.03.2018 19:39:21]

Сегодня нашёл способ для публикации родословной кошек через SQL запрос к базе данных.

Напомню, что была создана база данных кошек питомника, в котором представлены основные параметры кошек и автоссылки на отца и мать. По этим автоссылкам и было создано представление (CREATE View), состоящее из множественного рекурсивного запроса к базе данных. Поскольку база данных первоначально подготовлена в Microsoft Access, то проблемы с написанием SQL запроса с соединениями практически не было.

Однако мало в этом SQL запросе выбрать поля и прописать рекурсивные связи таблиц. Дело в том, что рекурсивное обращение фактически идёт к одной и той же таблице, поэтому выбранные поля при рекуррентном запросе имеют те же имена, что и в основной таблице, и не показываются после выполнения запроса. Поэтому все эти поля нужно явно переименовать, что и было сегодня сделано. И это был нудный и неблагодарный труд. Дело в том, что глубина рекурсии – 4 поколения, по отцу и матери, с каждой рекурсии выбирается шесть полей! К счастью мне помогло предварительное планирование имён.

Каждую ветвь рекурсии я обозначал как ветвь M (Male, мужчина) или F (Female, женщина), и соответствующим образом делал обход деревьев. В результате каждая рекурсия у меня могла быть закодирована последовательностью символов «M» и/или «F», повторяющихся от 1 до 4 раз. Мне оставалось только копипастом добавлять эти последовательности к оригинальным именам таблицы, и Бинго, уникальные имена, сгенерированы, и их легко набирать и модифицировать.

Макет таблицы построения родословной был мною отлажен ранее. Осталось добавить только логику обработки «незаполненных значений» в базе данных, и программа для построения родословной кошки из данных на кошек питомника готова.

 

Posted in IT

Добавить комментарий