База данных



Движки будут плагинами к приложению.

Начнем с того что намечается поддержка сразу 3х движков БД. Это:

Основная трудность заключается в том, что движки могут не поддерживать некоторые виды запроов sql. К примеру, SqLite не поддерживает некоторые комманды и возможности, поэтому придется писать посредника между клиентами БД и собственно самой БД. Это будут движки-плагины. Единомоментно загружен будет только 1 движек.

Для начала имхо нужно сделать один движек (думаю в сторону PostgreSql), а потом уже можно будет и прикручивать остальное.

Далее, примем за аксиому, что у клиента БД должно быть описание своих таблиц, и клиент должен сам следить за их состоянием. Отсюда вытекает, что клиент должен уметь создавать, удалять, изменять свои таблицы, ключи, триггеры и прочее. Для обеспечения безопасности остальных данных думаю ввести понятие "префикс клиента в БД". Собственно ничего сложного тут нет. Просто таблицы, ключи, триггеры, функции итд будут автоматом получать некий префикс, созданый клиентом. На примере rsdn это будет скажем rsdn_messages, rsdn_PK_forums, итд.

Решил все это дело основать на объектной модели БД. Клиенты БД не будут иметь дело непосредственно с sql, sql будет создаваться из модели БД. Данный подход позволит отслеживать также и структуру БД клиента. Сама-же объектная модель делится на объетную модель БД и модель запросов. Модель БД описывает структуру БД клиента (таблицы, их поля, индексы...), Модель запросов, отталкиваясь от модели БД описывает запросы к БД. Подразумевается, что запросы не будут динамическими, а будут меняться лишь их параметры (условия отбора). Это позволит создавать текст требуемых запросов при старте программы и в дальнейшем уже просто подставлять требуемые данные в условия отбора.
Данная методика позволит абстрагироваться от используемого движка БД.



Итак. Есть абстрактный клиент, есть абстрактный движок, есть общий класс БД (окбд). Действия по порядку.