Common lisp 如何使用外键也用作键来实现viewclass
假设我有这样的SQL表定义Common lisp 如何使用外键也用作键来实现viewclass,common-lisp,clsql,Common Lisp,Clsql,假设我有这样的SQL表定义 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
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
);
第一张桌子是直的
(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模型实现给定的表组合吗?如果可以,如何实现?我认为最大的问题是组合主键的声明(即
主键(开始,结束)
)。使用非复合主键约束设置连接是很简单的:
(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目前不支持这种设置。也不支持对删除行为进行表示
如果您同时需要这两种功能,您应该可以通过返回到