| Ржавая подкова | Найти пещеру
Примеры | Сложные запросы и добавление новых данных | Единицы измерения | Действительные таблицы

В 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". Однако, такая избыточность является оправданной, так как она позволяет избежать лишних расчетов при многочисленных пользовательских запросах.

| Ржавая подкова | Найти пещеру