Приведение хранилища к реляционной форме (постановка)
Материал из GedeminWiki
Версия от 16:15, 9 октября 2009; SYSDBA (обсуждение | вклад)
- Объект хранилища
- Относится к существующей иерархии классов, определенных в модуле gsStorage.pas.
- Бизнес-объект хранилища
- Предназначен для работы с данными хранилища в реляционной таблице. Определен в файле gdcStorage.pas.
Идеи
- Вместо упаковки и записи всего-всего в один большой блоб будем использовать реляционную таблицу для хранения древовидной иерархии.
- Создадим бизнес-объект для работы с таблицей. Сооветственно, отпадет необходимость в частных окнах для просмотра хранилища и его элемента. Нас вполне устроит обычная форма просмотра и диалоговое окно.
- Сохраняем неизменной как иерархию классов Хранилища, так и их интерфейсы.
- Вводим признак того, что объект хранилища был изменен.
- Добавляем в объект хранилища свойство ИД, по которому будем связывать его с записью в базе.
- Для вновь созданных объектов ИД = -1.
- При загрузке хранилища из базы данных создаем объекты хранилища.
- Помечаем их все, как неизмененные.
- Данные БЛОБ объектов грузим только при первом обращении к соответствующим объектам.
- При сохранении хранища сохраняем/добавляем только измененные объекты.
- При удалении объекта хранилища, соответствующую запись удаляем из базы сразу же.
- Если открыт бизнес-объект хранилища, то он синхронизируется с соответствующим объектом хранилища следующим образом:
- При удалении записи в наборе данных бизнес-объекта, соответствующий объект удаляется (но, при этом обращения к базе данных не делается. Мы и так удалили соответствующую запись через БО).
- При изменении или добавлении записи в набор данных БО, изменяется/добавляется соответствующий объект хранилища. При этом флаг изменения у него не выставляется.
- Сопоставление объекта хранилища и записи в наборе данных БО осуществляется через ИД.
- При апгрейде структуры БД:
- Создаются новые метаданные.
- Данные хранилища перегоняются в новые метаданные.
- Старые данные защищаются от изменения.
- Сохранение и загрузка из потока
- Формат данных двоичного потока при сохранении объектов хранилища не изменяется.
- При считывании объектов хранилища из двоичного потока они помечаются как измененные и для каждого объекта мы пытаемся найти соответствующую запись в таблице и подставить ее ИД в соответствующее свойство объекта.
- Настройки
- При формировании настройки будем проверять, входят ли в нее объекты хранилища. Если да, то будем заменять их на бизнес-объекты хранилища.
- При загрузке бизнес-объектов хранилища мы должны выполнять сопоставление в первую очередь по полному пути и только потом по РУИДу.
- Хэширование...