Я собираюсь преобразовать иерархию классов, которая будет храниться в базе данных 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.
В настоящее время у меня есть пара идей, как сохранить это в базе данных.
а. Храните все заметки в одной широкой таблице
Таблица будет содержать всю информацию, необходимую всем классам, полученным из Note
.
CREATE TABLE t_note(
id INTEGER PRIMARY KEY,
message TEXT,
time DATETIME,
begin DATETIME,
end DATETIME,
event_id INTEGER
);
В будущих классах, происходящих из Note
, необходимо добавить новые столбцы в эту таблицу.
В. Сопоставьте каждый класс с таблицей
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
, необходимо создать новую таблицу.
С. Используйте нормализацию базы данных и 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
.
Д. Сопоставьте каждый конкретный класс с таблицей (недавно добавленный на основе текущих ответов)
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?
Есть ли лучшие варианты?