Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.033 c
1-1093405354
COOLer
2004-08-25 07:42
2004.09.12
DataSet to XML


1-1093792168
Mihey_temporary
2004-08-29 19:09
2004.09.12
Проблема с записью в файл значения указателя


3-1092391295
Nata
2004-08-13 14:01
2004.09.12
isc4.gdb


6-1089278123
Iraizor
2004-07-08 13:15
2004.09.12
Вопрос про Сокеты и размер блока


10-1036753799
KA_
2002-11-08 14:09
2004.09.12
OLE с помощью CORBA





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский