假设我有像这样的SQL表定义
timer = new QTimer(this);
timer->setObjectName("timerOne");
ui->setupUi(this);
第一个表格是直截了当的
CREATE TABLE X (
id integer not null,
value character varying,
PRIMARY KEY (id)
);
CREATE TABLE Y (
start integer not null,
end integer not null,
value character vartying,
PRIMARY KEY (start,end),
FOREIGN KEY(start)
REFERENCES X (id)
ON DELETE CASCADE,
FOREIGN KEY(end)
REFERENCES X (id)
ON DELETE CASCADE
);
但我不知道如何以I can either define (clsql:def-view-class x ()
((id
:db-kind :key
:db-type integer
:db-constraints :not-null
:reader id)
(value
:initarg :value
:initform nil
:db-type (string 255)
:reader value))
(:base-table xes))
db-kind
或:key
完成第二次。此外,我没有找到任何有关:join
是否可以使用clsql oop模型实现给定的表组合,如果是,如何实现?
答案 0 :(得分:2)
我认为最大的问题是复合主键的声明(即PRIMARY KEY (start, end)
)。使用非复合主键约束设置连接是直截了当的:
(clsql:def-view-class y ()
((start
:db-kind :join
:db-info (:join-class x
:home_key y_start
:foreign_key id
:set nil)
:db-type integer
:db-constraints :primary-key
:reader start)
((end
:db-kind :base
:db-type integer
:db-constraints :not-null
:reader start)
(value
:initarg :value
:initform nil
:db-type (string 255)
:reader value))
(:base-table yes))
原则上,人们可能希望将复合键设置为类选项,但CL-SQL的OODML目前不支持此功能。也没有支持表达ON DELETE行为。
如果你需要这两个,你应该可以回到execute-commands。