| Ржавая подкова
| Найти пещеру
Примеры
| Сложные запросы и добавление новых данных
| Единицы измерения
| Действительные таблицы
В 2000 году один товарищ поддерживал список пещер. Он отсканировал, перенабрал, скопировал из сети некоторое количество материала, распределил его по страничкам и сделал список ссылок. Через некоторое время он пришёл к выводу, что в одиночку следить за пещерами – это дико. Разумнее сделать конструкцию, позволяющую распределять управление списком между селеогруппами. Накопление материала было преостановлено, зато было начато создане такой конструкции (есть надежда, что с какого-то момента она будет развиваться как открытый проект). Пока написан лишь интерфейс, позволяющий строить списки пещер, выбирая данные из базы, в которую в настоящее время внесены лишь записи из списка пещер 2000 года. Реализация части конструкции, которая позволит спелеоклубам/координаторам самостоятельно редактировать данные по своим районам остаётся делом будущего.
Описывается текущая конфигурация. Приводятся некоторые соображения по редактированию пещерной базы.
В настоящее время данные по пещерным системам накапливаются в трех табличках ("Районы", "Входы" и "Системы"), созданных на небольшом сервере MySQL. В таблицу "Районы" можно заносить общие данные о районах (название, географические координаты ограничивающего многоугольника, ссылку и др.). Районы идентифицируются уникальным номером, а в запись о районе может быть включен идентификатор района, включающего в себя данный. В таблицу "Входы", как не сложно догадаться, включаются данные о входах. Помимо уникального номера запись о входе может содержать идентификатор района с минимальной площадью, к которому принадлежит данный вход, разницу между высотой входа и высотой дна пещеры, идентификатор пещерной системы, географические координаты и др. данные. В таблицу "Системы" записываются данные, характеризующие пещерные системы, такие как объем, максимальный расход, диапазон высот (разница между высотами верхней и нижней точек системы), глубина… Содержание некоторых колонок таблицы "Системы" компилируется с использованием данных других таблиц. Например, данные в колонку "Кол-во входов" заносятся при подсчете записей из таблицы "Входы", относящихся к данной системе.
Руководство по заполнению формы запроса не создавалось, однако ниже приводится несколько примеров, позволяющих в какой-то степени представить как можно составить запрос.
| Записи по пещерам, диапазон высот которых ≥ 1000 м, упорядоченные по убыванию диапазона высот. | Пример | Результат |
| 10 записей по пещерам с наибольшим высотным диапазоном. Упорядочивание – по убыванию диапазона высот. | Пример | Результат |
| Записи по пещерам Арабики, диапазон высот которых ≥ 1000 м, упорядоченные по убыванию диапазона высот. | Пример | Результат |
| Записи по пещерам Караби и Арабики, название которых начинается на букву "В". | Пример | Результат |
| Пустая форма (не является примером). | Запрос | Результат |
Максимальное количество строк, выводимых при ответе на запрос, составляет 256. – Старайтесь формулировать запрос как можно точнее.
Открытие порта для прямых SQL-запросов в ближайшее время не планируется, однако если ваш запрос не может быть сформулирован с помощью пользовательской формы, и при этом вы все-таки хотите его осуществить, попробуйте сформулировать условия запроса в спелеорассылке или в сообщении на адрес, приведенный вверху и внизу странички – вероятно, вы получите ответ.
Данные о географических координатах входов (при их наличии в базе) могут быть предоставлены по электронной почте после публикации обоснования запроса и возможного последующего обсуждения в рассылке по результатам обсуждения или в случае игнорирования такой публикации подписчиками рассылки в течение как минимум одной недели.
Коррекция и внесение новых данных осуществляется только после их публикации в спелеорассылке (кроме данных по географическим координатам входов). При этом желательно явно указывать, что публикуемые данные предназначены в том числе для внесения в базу. Данные по координатам входов можно направлять непосредственно на адрес, приведенный вверху и внизу этой странички.
В основном используется СИ. Например, максимальный расход измеряется в м3/с. Температура измеряется в °C. При этом углы записываются в градусах, а в чем измерять сложность еще не выбрано.
Параметры, которые можно корректировать и вносить прямо сейчас, видны из приводимых ниже описаний таблиц.
mysql> describe areas; describe entrances; describe systems; +---------------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+-----------------------+------+-----+---------+----------------+ | id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment | | parent_id | mediumint(8) unsigned | YES | | NULL | | | area_name | varchar(2044) | YES | | NULL | | | area_type | varchar(2044) | YES | | NULL | | | area_name_rus | varchar(2044) | YES | | NULL | | | area_type_rus | varchar(2044) | YES | | NULL | | | longitude | double | YES | | NULL | | | latitude | double | YES | | NULL | | | elevation | double | YES | | NULL | | | area_value | double | YES | | NULL | | | bounds | varchar(20476) | YES | | NULL | | | reference | varchar(2044) | YES | | NULL | | | reference_rus | varchar(2044) | YES | | NULL | | +---------------+-----------------------+------+-----+---------+----------------+ 13 rows in set (0.00 sec) +----------------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+-----------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | sys_id | int(10) unsigned | YES | | NULL | | | area_id | mediumint(8) unsigned | YES | | NULL | | | entr_name | varchar(2044) | YES | | NULL | | | entr_name_rus | varchar(2044) | YES | | NULL | | | entr_type | varchar(2044) | YES | | NULL | | | from_bottom | double | YES | | NULL | | | longitude | double | YES | | NULL | | | latitude | double | YES | | NULL | | | elevation | double | YES | | NULL | | | discovery_date | date | YES | | NULL | | | reference | varchar(2044) | YES | | NULL | | | reference_rus | varchar(2044) | YES | | NULL | | +----------------+-----------------------+------+-----+---------+----------------+ 13 rows in set (0.00 sec) +-----------------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | sys_name | varchar(2044) | YES | | NULL | | | sys_type | varchar(2044) | YES | | NULL | | | sys_name_rus | varchar(2044) | YES | | NULL | | | sys_type_rus | varchar(2044) | YES | | NULL | | | list_of_entrances | varchar(2044) | YES | | NULL | | | list_of_entrances_rus | varchar(2044) | YES | | NULL | | | entrances_num | mediumint(8) | YES | | NULL | | | area_path | varchar(2044) | YES | | NULL | | | path_ref | varchar(2044) | YES | | NULL | | | area_path_rus | varchar(2044) | YES | | NULL | | | path_ref_rus | varchar(2044) | YES | | NULL | | | volume | double | YES | | NULL | | | area_value | double | YES | | NULL | | | sys_length | double | YES | | NULL | | | proj_length | double | YES | | NULL | | | vertical_range | double | YES | | NULL | | | sys_depth | double | YES | | NULL | | | elevation | double | YES | | NULL | | | max_drain | double | YES | | NULL | | | difficulty | double | YES | | NULL | | | temperature | double | YES | | NULL | | | discovery_date | date | YES | | NULL | | | reference | varchar(2044) | YES | | NULL | | | reference_rus | varchar(2044) | YES | | NULL | | +-----------------------+------------------+------+-----+---------+----------------+ 25 rows in set (0.01 sec)
Таблица "systems" выглядит избыточной (несколько колонок содержат почти одни и те же данные). Например, колонка "area_path" компиллируется с использованием исходных данных таблицы "areas". Однако, такая избыточность является оправданной, так как она позволяет избежать лишних расчетов при многочисленных пользовательских запросах.