Какой запрос создает триггер для генерации составного первичного ключа с двумя fk? - PullRequest
1 голос
/ 19 января 2011

Я пытаюсь написать команду для создания триггера, который генерирует составной первичный ключ. Этот ПК в свою очередь основан на двух ФК.

Я напишу примеры таблиц, чтобы быть более конкретными.

(Таблица, над которой я работаю)

CREATE TABLE DB.MESSAGE (
  TEXT      CLOB         NOT NULL,
  SUBJECT   VARCHAR2(2000) NOT NULL,
  MSG_TYPE  NUMBER(1) NOT NULL,
  MAIL_ID NUMBER(10) NOT NULL
)
;

ALTER TABLE DB.MESSAGE ADD CONSTRAINT MSG_PK PRIMARY KEY ( MSG_TYPE, MAIL_ID ) ;

ALTER TABLE DB.MESSAGE ADD
(
    CONSTRAINT MESSAGE_TYPE_ID_FK
    FOREIGN KEY ( MSG_TYPE )
        REFERENCES DB.TYPES ( TYPE_ID )
);

ALTER TABLE DB.MESSAGE ADD
(
    CONSTRAINT MESSAGE_MAIL_FK
    FOREIGN KEY ( MAIL_ID )
        REFERENCES DB.EML_MAIL ( MAILTO_ID )
);

(Справочные таблицы)

CREATE TABLE DB.TYPES (
  TYPE_ID    NUMBER(13)        NOT NULL, 
  NAME       VARCHAR2(10)       NOT NULL
)
;

CREATE TABLE DB.MAIL (
  MAIL_ID    NUMBER(10)        NOT NULL, 
  MAIL       VARCHAR2(350)       NOT NULL
)
;

Мой запрос пока

create or replace
TRIGGER DB.TRG_MESSAGE_ID
BEFORE  INSERT ON DB.MESSAGE

FOR EACH ROW
BEGIN
 IF INSERTING THEN
  IF :NEW."MSG_ID" IS NULL THEN
    SELECT DB.TYPES.TYPE_ID ??????
    INTO :NEW."MSG_ID" FROM dual;
  END IF;
 END IF;
END;

РЕДАКТИРОВАТЬ: Таким образом, идея этого вопроса заключалась в том, что будет отдельный столбец с объединением обоих ключей, составляющих составной ключ. Друг сказал мне, что это неправильно, вы просто поставили оба поля как pk и все. Это правда?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...