Common lisp 如何使用外键也用作键来实现viewclass

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

假设我有这样的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 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目前不支持这种设置。也不支持对删除行为进行表示

如果您同时需要这两种功能,您应该可以通过返回到