首页 > 解决方案 > 在具有 2 列主键的表上定义 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)
);

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

标签: sqlforeign-keysh2

解决方案


如果我适当地得到你的怀疑。

你可以这样:

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);

干杯。


推荐阅读