Нужен совет по реализации
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Здравствуйте.
Я пытаюсь написать базу данных. Для представления одного поля, хочу написать структуру Data, которая будет хранить название данных, тип данных и значение.
Но есть одна проблема. Как организовать значение этих данных?
У меня были варианты сделать значение строковым типом, то есть как то так:
Но тогда пропадает весь смысл члена type теряется.
Ещё была идея сделать так:
То есть выделять память под указатель того типа, который используется.
Что лучше по-вашему? Или у вас есть свой вариант?
porshe, вопрос: какая модель данных предполагается в твоей БД?
Пока что твои зарисовки выглядят... ну не совсем...
На счёт первого варианта — ты уже и сам догадался.
На счёт второго... Ты хочешь иметь в записи n-ное количество указателей (n == количеству типов данных), но при этом реально использовать только один из них. Понимаешь, куда я клоню?
Кстати, конечно
enum
естьint
, но... (1) в C++11 это может быть и необязательноint
и (2) если писать в духе C++, а не чистого C, то следовало бы написатьдабы не вводить себя в искушение.
И вот ещё член структуры
name
. Это что, у каждого значения будет своё уникальное имя? Или НЕ уникальное? Или его для каждого значения быть вообще не должно? (зависит, в частности, от модели данных БД)Если хочешь сам контролировать типы данных, то храни просто байты.
Не знаю, да и БД то её сложно назвать... Так баловство. Хочу сделать что то типа БД, где пользователь бы мог сам настраивать поля данных для объектов. То есть объект будет выглядеть как то так:
Естественно, у каждой БД будет свой тип, определяемый классом
Object
.Член
name
служит для названия поля. Объясняю я косоязычно, покажу пример:Допустим, БД используется для хранения данных о жителях города N. На каждого человека в БД задаётся имя, фамилия, возраст.
Содержимое:
Тогда член
data
классаObject
будет хранить 3 объекта классаData
.name
первого объектаData
будет «Фамилия», второго — «Имя», третьего — «возраст».Тип первого будет
STRING
, второго —STRING
, третьего —INTEGER
.Сама БД будет представляться как
std::list<Object>
.Вот это мне кажется наиболее удачным вариантом, пожалуй, так и поступлю.
Мне кажется, что ты ещё сам для себя не определился что это и для чего это нужно.
Город N, надеюсь, уездный? ;-)
Сейчас я вижу, что в каждом объекте дублируются названия имён полей. Это есть нехорошо.
По этой БД будет достаточно проблематично (медленно) сделать выборку, допустим, по фамилии. Да и вообще делать какие-либо действия достаточно сложно: структура данных нефиксирована, каждый
Object
может иметь свой набор полей со своими типами данных. Причём даже нет гарантии, что поля с одинаковыми именами имеют одинаковый тип данных. Как с этим работать — лично я, не представляю.Ты таки почитай в Википедии по поводу различных моделей данных и смежные статьи по ссылкам.
Ну да, город N уездный, если верить И. Ильфу и Е. Петрову («Двенадцать стульев»). Но, впрочем, песня(и) хорошая(ие) :)
Хорошо, сначала попытаюсь заполнить пробелы в теории, а только потом к практике приступлю :)