Главная страница
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.021 c
1-1093530735
appendix
2004-08-26 18:32
2004.09.12
UpDown


1-1093883188
Lord de Mon
2004-08-30 20:26
2004.09.12
Хочу переменной типа стринг присвоить значение с реестра


8-1088049135
Ozone
2004-06-24 07:52
2004.09.12
WebCAM


3-1092898569
jappak
2004-08-19 10:56
2004.09.12
Как игнорировать помечанные записи.


14-1093067609
kaZaNoVa
2004-08-21 09:53
2004.09.12
TThread и через CreateThread