Гиперкуб из базы данных
Существует типичная операция просмотра таблицы базы данных как гиперкуба:
одна колонка содержит значение в узле многомерного куба, остальные колонки - указывают многомерные координаты
(меньшее количество отсчетов координат демонстрируется в браузере,
большее количество отсчетов все еще не запрошено с базы данных).
Пример такого гиперкуба изображен ниже, где
"h" и "H" - заголовки измерений (например, "покупатель", "товар", "город" и т.д.),
"v" и "V" - отсчеты многомерных координат (имена покупателей, названия товаров, названия городов),
"a" - значение в узле многомерного куба.
-----------------------------------------------------
| | H | V | V |
| -----------------------------------------
| | H | V | V | V | V |
| -----------------------------------------
| | H | V | V | V | V | V | V | V | V | V |
-----------------------------------------------------
| h | h | h |
------------- -------------------------------------
| | | v | | a | a | a | a | a | a | a | a | a |
| | |---| |-----------------------------------|
| | v | v | | a | a | a | a | a | a | a | a | a |
| | |---| |-----------------------------------|
| v | | v | | a | a | a | a | a | a | a | a | a |
| |---|---| |-----------------------------------|
| | | v | | a | a | a | a | a | a | a | a | a |
| | v |---| |-----------------------------------|
| | | v | | a | a | a | a | a | a | a | a | a |
|---|---|---| |-----------------------------------|
| | | v | | a | a | a | a | a | a | a | a | a |
| | |---| |-----------------------------------|
| | | v | | a | a | a | a | a | a | a | a | a |
| | v |---| |-----------------------------------|
| | | v | | a | a | a | a | a | a | a | a | a |
| | |---| |-----------------------------------|
| | | v | | a | a | a | a | a | a | a | a | a |
| |---|---| |-----------------------------------|
| v | | v | | a | a | a | a | a | a | a | a | a |
| | |---| |-----------------------------------|
| | v | v | | a | a | a | a | a | a | a | a | a |
| | |---| |-----------------------------------|
| | | v | | a | a | a | a | a | a | a | a | a |
| |---|---| |-----------------------------------|
| | | v | | a | a | a | a | a | a | a | a | a |
| | v |---| |-----------------------------------|
| | | v | | a | a | a | a | a | a | a | a | a |
------------- -------------------------------------
Введем html-элемент dialogue, демонстрирующий записи таблицы базы данных в виде гиперкуба
(чтобы таблица базы данных демонстрировалась именно в таком виде,
а не в виде таблицы или дерева,
свойство type должно быть равно cube).
В атрибуте roll укажем название таблицы базы данных
<dialogue roll="A"/>
dialogue {
type: cube;
}
или SQL-запрос
<dialogue roll="select * from A where a15=100"/>
dialogue {
type: cube;
}
а в свойствах
- thead1 - название колонки, содержащей отсчеты по 1-му горизонтальному измерению
- thead2 - название колонки, содержащей отсчеты по 2-му горизонтальному измерению
- thead3 - название колонки, содержащей отсчеты по 3-му горизонтальному измерению
- etc
- tside1 - название колонки, содержащей отсчеты по 1-му вертикальному измерению
- tside2 - название колонки, содержащей отсчеты по 2-му вертикальному измерению
- tside3 - название колонки, содержащей отсчеты по 3-му вертикальному измерению
- etc
- tbody - название колонки, содержащей значения в узлах многомерного куба
dialogue {
thead1: §a3;
thead2: §a4;
thead3: §a9;
tside1: §a3;
tside2: §a2;
tside3: §a5;
tbody: §a7;
}
а также
- address - доменное имя или IP-адрес СУБД
(по умолчанию тот же адрес, откуда взят html-документ)
- size - количество одновременно демонстрируемых отсчетов
по последнему горизонтальному и последнему вертикальному измерениям, т.е. ширину и высоту html-элемента
- type=cube
Связь с базой данных будет происходить по отдельному TCP-порту по протоколу SQL5.
Когда браузер встречает этот html-элемент в процессе загрузки документа, он:
- считывает первые порции отсчетов по каждому измерению
(если колонка, содержащая отсчет, одновременно ссылается на некую главную таблицу, то
считывает записи этой таблицы,
демонстрирует значение второго ее поля в качестве отсчета,
указывает название этой таблицы как заголовка измерения)
select * from A limit 50;
затем считывает значения в узлях многомерного куба, соответствующих этим отсчетам
- запрашивает количество отсчетов по последнему горизонтальному и последнему вертикальному измерениям
(чтобы отобразить в слайдерах)
Примечание: поле представления (view) A ссылается на ту же самую колонку некой таблицы C,
на которую ссылается поля таблицы B, вошедшее в представление.
Отображаемые значения демонстрируются так:
P.S.
dialogue с любым значением свойства type
(равным record, tree, или cube)
может быть главным html-элементом для
dialogue также с любым значением свойства type.
Сам html-документ, запросы от всех dialogue, содержащихся в нем,
ответы на запросы идут последовательно по одному и тому же TCP-соединению
(ответы разделены друг от друга и от html-документа баментом
<?new/?>,
ответы приходят после окончания получения html-документа).
Тюрин Дмитрий