Как реализовать класс просмотра с внешними ключами, также используемыми в качестве ключей
Предположим, у меня есть определения таблиц 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
, Далее я не нашел никаких спецификаций, касающихся ON DELETE ...
Можно ли реализовать данную комбинацию таблиц, используя модель clsql oop, и если да, то как?
1 ответ
Я думаю, что самой большой проблемой является объявление составного первичного ключа (т.е. 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))
В принципе, можно настроить составной ключ как параметр класса, но в настоящее время это не поддерживается в OODML CL-SQL. Также нет поддержки для выражения поведения ON DELETE.
Если вам нужны оба из них, вы можете сделать это, вернувшись к execute-командам.