Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранимые это всегда не Delphi? COM нельзя "прикрутить"? / 12 сообщений из 12, страница 1 из 1
26.05.2004, 11:53
    #32534114
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
Надо озадачить сервер!
Озадачить - это значит:

Надо хранить на сервере 100 тыс. полилиний и их точки.
Для запроса надо получить только те линии, которые входят/видны на экране.
Т.е. надо Габарит линии сравнить с габаритом (TRect) экрана.
Можно вычислять на клиенте, на сервере при выходе, на серв. записывать в доп.поле при входе.
Что выбрать? Если сейчас всё делает клиент без всякой БД и медленно.

Теоретически - вычислять площадь фигуры из 2-3 тыс.точек надо динамически, каждый раз при получении этой фигуры из сервера. Но это огромная работа. Проще/или нет записывать её для каждой фигуры в допполе на сервере.
Тогда вопрос - а вдруг сервер загнётся это вычислять от 10 пользователей?
...
Рейтинг: 0 / 0
26.05.2004, 13:34
    #32534508
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
Я бы сделал так для каждой фигуры (например, полилинии) у нас есть точки (например 4 штуки), кот. однозначно опрделяют габарит и положение. Т.е. есть две таблицы
Figures(
id_fig Number,
name VarChar2(200));

Points(
id_points Number,
id_fig Number,
x Number,
y Number)

Points.id_fig >>>------< Figures.id_fig

и селект для выбора всех входящих в облать(min_x,min_y; max_x,max_y):
select * from Figures f, Points p
where f.id_fig = p.id_fig
and p.x >= :min_x
and p.x <= :max_x
and p.y >= :min_y
and p.y <= :max_y

Все будет шустренко работать, если нужные поля проиндексировать
...
Рейтинг: 0 / 0
26.05.2004, 13:54
    #32534572
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
Вы предлагаете каждую точку в виде записей?
Если их порядка 100тыс. в формате Double/float на 1 млн. объектов (В КАЖДОМ!) - полилиний, то не проще хранить массив точек в виде двоичного буфера?
...
Рейтинг: 0 / 0
26.05.2004, 14:42
    #32534721
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
У вас как полилиния описывается?? Я предлагал каждую полилинию описывать двумя точками
...
Рейтинг: 0 / 0
26.05.2004, 14:57
    #32534773
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
2 bas
?????
Полилиния - набор связанных отрезков или ломаная линия. Для рисования на DC Win API требуется массив точек - buffer (можно взять и записать в двоичное BLOB поле).
...
Рейтинг: 0 / 0
26.05.2004, 15:04
    #32534796
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
Хорошо,
Тогда в таблице можно хранить массив точек в Blob - поле в таблице Figures, а таблице Points хранить 2 точки прямоугольника(правый верхний и нижний левый углы), кот. занимает эта ломаная. И когда нужные фигуры вытащили селектом, то их уже из блоба рисуете.

Код: plaintext
1.
2.
3.
4.
5.
6.
select distinct f.name, f.point_blob
from Figures f, Points p
where f.id_fig = p.id_fig
and p.x >= :min_x
and p.x <= :max_x
and p.y >= :min_y
and p.y <= :max_y
...
Рейтинг: 0 / 0
26.05.2004, 15:11
    #32534820
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
2 bas
Следовательно - зачем нам 2 таблицы 1<---------->1 (один к одному)?
Делаем одну - id, name, blobpoint, gabarit.
Вопрос - gabarit - вычисляемое поле. Как и где и каким языком вычислять.
...
Рейтинг: 0 / 0
26.05.2004, 16:43
    #32535094
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
На счет двух таблиц - я в общем случае сказал, т.к. точек, опред. габариты м.б. более (сложная форма) или менее(точка) 2ух. Если в вашем случае, то можно обойтись и одной таблицей, но я бы не советовал (м.б. потом габариты будете как сложный объект определять, тогда не подойдет эта схема). Короче, в вашем случае, в таблице Figures становится такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Figures(
id_fig Number,
name VarChar2( 200 ),
blobpoint Blob,
x_t Int,
y_t Int,
x_b Int,
y_b Int
);
Координаты габаритов выделены специально в отдельные столбцы для наилучшего поиска

и селект:

Код: plaintext
1.
2.
3.
4.
5.
6.
select f.name, f.point_blob
from Figures f
where 
(f.x_t >= :min_x
and f.y_t >= :min_y)
or ( f.x_b <= :max_x
and f.y_b <= :max_y)
...
Рейтинг: 0 / 0
26.05.2004, 16:51
    #32535120
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
В селекте только вместо or надо поставить and...
...
Рейтинг: 0 / 0
26.05.2004, 17:17
    #32535182
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
"...Хранимые процедуры

Перенос хранимых процедур – это наиболее трудоемкий процесс, т.к. придется переписывать все целиком. Но в правильно спроектированном трехзвенном приложении роль ХП должна быть сведена к минимуму. Основные трудности возникают при переводе ХП, возвращающих результирующий набор. Часть из них (не содержащие сложной бизнес-логики) может быть переведена в разряд представлений (view). Для остальных можно либо создавать временные таблицы на уровне соединения с СУБД, либо создавать постоянные таблицы и разграничивать данные в них по идентификатору подключения (SPID) (но тогда не забывайте их чистить :)). Если же вы решите ограничиться только MSSQL2000, то можете использовать тип "таблица" для возврата набора значений из процедуры. ..."
(c)
http://www.rsdn.ru/article/db/midas_migration.xml
...
Рейтинг: 0 / 0
27.05.2004, 09:24
    #32535883
mir
mir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
Все ваши проблемы уже решались много лет назад. Поищите информацию о пространственных БД (в т.числе пространственных навесках на стандартные СУБД) и пространственной индексации.
...
Рейтинг: 0 / 0
28.05.2004, 15:05
    #32539028
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые это всегда не Delphi? COM нельзя "прикрутить"?
Спасибо - то что нужно.
Не подскажите какие БД поддерживают?
А то прочёл, что даже MySQL заявки делает на работу с графическими примивами.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранимые это всегда не Delphi? COM нельзя "прикрутить"? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]