sql - 在具有 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)
);
但似乎不起作用甚至可能吗?
解决方案
如果我适当地得到你的怀疑。
你可以这样:
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);
干杯。
推荐阅读
- c - 如何识别堆栈溢出的错误点是在 MikroC 代码中强制设备重置错误
- sql - 我想编写一个 sql (Oracle SQL) 查询来从特定字符之后的列中选择字符串的一部分
- python-3.x - 在 s3 存储桶中创建文件但文件为空
- android - Android Studio 3.2 升级上的 java.lang.VerifyError
- docker - 'docker-compose up' 在此过程中停止
- jquery - 如何使用水晶语言和 kemal 计算每页
- arrays - 在 MQL4 中限制数组中的值
- node.js - 针对 README.md 中的代码示例运行测试?
- python - 如何通过消除连续互补方向对从给定方向列表中返回简化方向列表?
- python - 在 Windows 10 中从 Github 安装 Python 模块