我正在将类层次结构转换为存储在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.将所有音符存储在单个宽表中
该表将包含从注释导出的所有类所需的所有信息.
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),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.
CREATE TABLE t_timenote( id INTEGER PRIMARY KEY,time DATETIME ); CREATE TABLE t_timerangenote( id INTEGER PRIMARY KEY,end DATETIME ); CREATE TABLE t_eventnote( id INTEGER PRIMARY KEY,event_id INTEGER );
从Note引出的未来类需要创建一个新表.
sql中最合理的表示是什么?
有更好的选择吗?
解决方法
原文地址:https://www.jb51.cc/mssql/82164.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。