варианты реализации движка бд
От: Аноним  
Дата: 01.10.07 06:05
Оценка:
Наверное совершенно ламерский вопрос, но всё же задам его.
Пытаюсь сейчас написать что-то типа очень-очень простенькой обертки для бд, которая позволяла бы сохранять в базе объекты разных типов.
Каждый объект — что-то типа структуры с полями. Поля пока могут быть или простых типов (число, строка) или ссылка на другие объекты.
Пишу на C++ и пытаюсь придумать как всё это выразить в терминах языка.
Решил пока так:
класс — тип объекта. в нем классы, отвечающие за поля.
класс — собственно объект заданного типа.
т.е. простые операции можно записать как-то так

CSomeItem item = DB.CreateObject(CSomeItem::Type);
DB.SetValue(item,CSomeItem::Type::Field1,"blablabla");


Подскажите пожалуйста, может быть есть какие-то более разумные варианты размещения этих сущностей?

Дальше. Пока думал сам, хотел просто делать тупо — в классе типа и классах полей хранятся строки с названиями таблицы в базе и столбцов в ней.
Соответственно получение значения у объекта должно транслироваться во что-то типа

SELECT %s FROM %s WHERE id = %d

где первый параметр возьмется из класса поля, которое надо получить, второй — из класса типа объекта, а третий — из класса самого объекта.
Но видел где-то советы всему присваивать свои id. И типам объектов и полям. Т.е. запрос в результате должен быть примерно такой

SELECT (SELECT name FROM fieldid2name WHERE id = %d) FROM (SELECT name FROM objtypeid2name WHERE id = %d) WHERE id = %d

где первый параметр — id поля у объекта, второй — id типа объекта, третий — id самого объекта, для которого читаем значение.
Зачем так делать я не очень понял. Надо ли это? Для чего?

Да, пишу такую штуку скорее в целях самообразования, потому, наверное, не стоит предлагать воспользоваться чем-то готовым. Хочется собрать велосипед самому
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.