Главная страница
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.035 c
4-1091120974
DeMus
2004-07-29 21:09
2004.09.12
Как подключить в программе кассовый аппарат


1-1093596746
12345
2004-08-27 12:52
2004.09.12
аналог readln в C++


11-1080553866
Неуловимый Джо
2004-03-29 13:51
2004.09.12
RegKeyGetValueNames


3-1092710358
SASH2
2004-08-17 06:39
2004.09.12
wwDBEdit?


3-1092641183
Dmitriy O.
2004-08-16 11:26
2004.09.12
Как обьявить поле програмно ?