如何使用外键实现视图类也用作键

时间:2015-07-09 12:29:37

标签: common-lisp clsql

假设我有像这样的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模型实现给定的表组合,如果是,如何实现?

1 个答案:

答案 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