Я в процессе преобразования иерархии классов для хранения в базе данных SQL.
Оригинал псевдо код:
abstract class Note
{
int id;
string message;
};
class TimeNote : public Note
{
time_t time;
};
class TimeRangeNote : public Note
{
time_t begin;
time_t end;
};
class EventNote : public Note
{
int event_id;
};
// More classes deriving from Note excluded.
В настоящее время я 'У меня есть пара идей, как сохранить это в базе данных.
A.Храните все заметки в одной широкой таблице
Таблица будет содержать всю информацию, необходимую для всех классов, производных от Note
.
CREATE TABLE t_note(
id INTEGER PRIMARY KEY,
message TEXT,
time DATETIME,
begin DATETIME,
end DATETIME,
event_id INTEGER
);
Будущие классы, производные от Note
потребностьдобавить новые столбцы в эту таблицу.
B.Сопоставьте каждый класс с таблицей
CREATE TABLE t_note(
id INTEGER PRIMARY KEY,
message TEXT
);
CREATE TABLE t_timenote(
note_id INTEGER PRIMARY KEY REFERENCES t_note(id),
time DATETIME
);
CREATE TABLE t_timerangenote(
note_id INTEGER PRIMARY KEY REFERENCES t_note(id),
begin DATETIME,
end DATETIME
);
CREATE TABLE t_eventnote(
note_id INTEGER PRIMARY KEY REFERENCES t_note(id),
event_id INTEGER
);
Будущие классы, производные от Note
, должны создать новую таблицу.
C.Используйте нормализацию базы данных и VARIANT
/ SQL_VARIANT
CREATE TABLE t_note(
id INTEGER PRIMARY KEY,
message TEXT
);
CREATE TABLE t_notedata(
note_id INTEGER REFERENCES t_note(id),
variable_id TEXT, -- or "variable_id INTEGER REFERENCES t_variable(id)".
-- where t_variable has information of each variable.
value VARIANT
);
Будущие классы, производные от Note
, должны добавить новые variable_id
.
D.Сопоставьте каждый конкретный класс с таблицей (вновь добавленной на основе текущих ответов)
CREATE TABLE t_timenote(
id INTEGER PRIMARY KEY,
message TEXT,
time DATETIME
);
CREATE TABLE t_timerangenote(
id INTEGER PRIMARY KEY,
message TEXT,
begin DATETIME,
end DATETIME
);
CREATE TABLE t_eventnote(
id INTEGER PRIMARY KEY,
message TEXT,
event_id INTEGER
);
Будущие классы, основанные на Note
, должны создать новую таблицу.
Каким было бы наиболее логичное представление в SQL?
Есть ли лучшие варианты?