Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

Как правильно сохранить объекты в базе?   Найти похожие ветки 

 
miwa ©   (2004-08-14 19:18) [0]

Сразу уточню, что работаю с firebird.
Представляю себе несколько путей:
1. Внешней процедурой.
Процедура получает объект в качестве параметра, заполняет его полями параметры запроса и отсылает на сервер ExecSQL. Не нравится тем, что это подход "в лоб". Не знаю почему, но он мне кажется неправильным. Не соответствующим ни ООП ни современным БД.
2. Методом объекта.
В объекте пишется специальный метод, который сохраняет объект. Этот подход мне не нравится тем, что в модуль реализации класса автоматом добавляется пара модулей для оперирования, например, запросом TIBQuery.
3. Stored procedure.
А этот подход я просто не представляю как реализовывать. Как передать процедуре объект целиком, а не просто кучу свойств (так как в этом случае мы просто будем иметь вариацию первого или второго подхода).


 
Desdechado ©   (2004-08-14 20:30) [1]

если тебе нужно просто хранение данных без всяких там:
сортировок,
выборок с объединением других таблиц по свойствам объекта,
т.п.
то можешь просто сохранять его в BLOB-поле методом TPersistent.SaveToStream


 
jack128 ©   (2004-08-14 22:26) [2]


> TPersistent.SaveToStream
а что, в семерке такой метод появился?


 
miwa ©   (2004-08-14 23:28) [3]

Не, как раз нужны и выборки и сортировки и весь остальной комплект, который предоставляет "среднестатистическая" БД. А еще этих объектов ожидается дысячи-десятки тысяч. И воспомагательной информации об объектах, непосредственно завязаной на них (на ID тоесть) - уже на сотни тысяч записей.


 
Desdechado ©   (2004-08-15 14:48) [4]

2 jack128
Нет, но что мешает его написать? Тем более, что там предусмотрен для этого виртуальный метод DefineProperties. Я ж просто направление показал.

2 miva
Т.е. тебе надо, например, сделать выборку объектов, у которых цвет красный, но они не железные и не бытовая техника? Тогда в БЛОБе не катит, конечно.
А что тебя во втором методе смущает? То, что подключаешь другие модули? Ну, так это не страшно. Объект должен знать, как себя сохранять, раз уж он должен быть сохранен в БД. И должен знать, как себя считать и инициализировать. Все в порядке вещей. Тем более если объекты разных классов и каждый имеет свои особенности сохранения. Если же класс один, то тем более тревога не ясна.
Объемы в 10-100 тыс смешные для SQL-серверов.


 
miwa ©   (2004-08-16 21:50) [5]


> Т.е. тебе надо, например, сделать выборку объектов, у которых
> цвет красный, но они не железные и не бытовая техника?

Да, что-то типа того :о))


> Все в порядке вещей. Тем более если объекты разных классов
> и каждый имеет свои особенности сохранения. Если же класс
> один, то тем более тревога не ясна.

Не, ну почему же не ясна - малое количество и низкое качество располагаемых знаний ;о((. Относительно, конечно ;о)).


> Объемы в 10-100 тыс смешные для SQL-серверов.

Знаю, но для самостоятельной обработки это уж слишком. Поэтому и остановился на SQL.

Значит, говорите, ничего зазорного нету в том, что я в свой u_classes (так он у меня называется, модуль-то) напишу uses DB, IB, IBCustomDataSet, IBQuery, IBDatabase? Что ж. Если так, тогда всем спасибо за внимание.



Страницы: 1 вся ветка

Текущий архив: 2004.09.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.065 c
1-1093581154
Sollo
2004-08-27 08:32
2004.09.12
Подсветка Begin End


1-1093598663
Mim1
2004-08-27 13:24
2004.09.12
Использование графики в формате Jpeg в CLX


14-1093088582
YurikGL
2004-08-21 15:43
2004.09.12
16 цветов


9-1084857336
delin
2004-05-18 09:15
2004.09.12
Отобразить движение самолета + радар в центре экрана


14-1093193860
Torry Real 1444
2004-08-22 20:57
2004.09.12
DI is closed