在具有 2 列主键的表的 H2 数据库中定义外键约束

时间:2021-03-29 15:08:59

标签: sql foreign-keys h2

我的表有 2 列主键。 我不会从其他表在该表上创建外键。

CREATE TABLE MESSAGING.RECIPIENT (
TYPE VARCHAR NOT NULL,
SERIAL_NUMBER VARCHAR NOT NULL,
CONSTRAINT PK_RECIPIENT PRIMARY KEY (TYPE,SERIAL_NUMBER)
);

我正在尝试类似的事情:

CREATE TABLE MESSAGING.MESSAGE (
    ID VARCHAR NOT NULL,
    RECIPIENT_ID BIGINT,
    MESSAGE_VALID_FROM TIMESTAMP,
    CONSTRAINT PK_MESSAGE PRIMARY KEY (ID),
    CONSTRAINT MESSAGE_FK FOREIGN KEY (RECIPIENT_ID,RECIPIENT_ID) REFERENCES MESSAGING.RECIPIENT(TYPE,SERIAL_NUMBER)
);

但似乎不起作用 甚至有可能吗?

1 个答案:

答案 0 :(得分:0)

如果我正确地得到了你的怀疑。

你可以这样做:

CREATE TABLE MESSAGING.RECIPIENT (
TYPE VARCHAR NOT NULL,
SERIAL_NUMBER VARCHAR NOT NULL
);

ALTER TABLE MESSAGING.RECIPIENT ADD PRIMARY KEY (TYPE,SERIAL_NUMBER);

在另一个表中要引用MESSAGE.RECIPIENT,您必须添加两个字段才能获得外键;你可以这样做:

CREATE TABLE MESSAGING.MESSAGE (
    ID VARCHAR NOT NULL,
    RECIPIENT_TYPE VARCHAR,
    RECIPIENT_SERIAL_NUMBER VARCHAR,
    MESSAGE_VALID_FROM TIMESTAMP
);

ALTER TABLE MESSAGING.MESSAGE ADD PRIMARY KEY(ID);
ALTER TABLE MESSAGING.MESSAGE ADD FOREIGN KEY(RECIPIENT_TYPE,RECIPIENT_SERIAL_NUMBER) REFERENCES MESSAGING.RECIPIENT(TYPE,SERIAL_NUMBER);

干杯。

相关问题