Возник еще один вопрос.
Есть таблицы:
DEAL - СДЕЛКИ
Код: Выделить всё
CREATE TABLE DEAL(
DEAL_NO INTEGER NOT NULL,
NAME DEALNAME NOT NULL,
FK_DEPT_NO INTEGER
);
Код: Выделить всё
CREATE TABLE ROLES_IN_DEAL(
FK_DEAL INTEGER NOT NULL,
FK_ROLE INTEGER NOT NULL,
FK_SOTR INTEGER,
RATE DECIMAL(2,2) DEFAULT 0
);
ROLES_IN_DEPT - типа шаблонного набора ролей для сделки данного отдела (FK_DEPT)
Код: Выделить всё
CREATE TABLE ROLES_IN_DEPT(
FK_DEPT INTEGER NOT NULL,
FK_ROLE INTEGER NOT NULL,
FK_SOTR INTEGER,
RATE DECIMAL(9,2)
);
При добавлении сделки в таблицу DEAL неплохо бы одновременно с этим копировать в ROLES_IN_DEAL набор шаблонных ролей из ROLES_IN_DEPT, чтобы по умолчанию список ролей для сделки уже автоматически строился.
Удаление и Апдейт решаются ограничениями
Код: Выделить всё
ALTER TABLE ROLES_IN_DEAL ADD CONSTRAINT
FK_RID_DEAL_CONSTRAINT
FOREIGN KEY (FK_DEAL) REFERENCES DEAL (DEAL_NO)
ON DELETE CASCADE
ON UPDATE CASCADE;
ALTER TABLE ROLES_IN_DEAL ADD CONSTRAINT
FK_RID_ROLE_CONSTRAINT
FOREIGN KEY (FK_ROLE) REFERENCES THEROLE (ID)
ON DELETE CASCADE
ON UPDATE CASCADE;
Код: Выделить всё
ALTER TRIGGER TR_DEAL_BI
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.DEAL_NO IS NULL) THEN NEW.DEAL_NO = GEN_ID(DEAL_NO_GEN, 1);
INSERT INTO ROLES_IN_DEAL
(
FK_DEAL,
FK_ROLE,
FK_SOTR,
RATE
)
SELECT
NEW.DEAL_NO,
R.FK_ROLE,
R.FK_SOTR,
R.RATE
FROM
ROLES_IN_DEPT R
WHERE
R.FK_DEPT = NEW.FK_DEPT_NO;
END
;
В after insert невозможно получить ключ только что заинсерченной записи.
Как вообще посоветуете решать такую задачу?