考虑
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on)
);
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES ( .. what goes here? ..),
PRIMARY KEY (id, bar_created_on)
);
Run Code Online (Sandbox Code Playgroud)
如何在"bar"中创建引用"foo"中的PK的FK?
Mik*_*ll' 42
如何在"bar"中创建引用"foo"中的PK的FK?
根据您当前的结构,您不能.
必须将外键引用的目标声明为PRIMARY KEY或UNIQUE.所以要么这个
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
UNIQUE (id, foo_created_on)
);
Run Code Online (Sandbox Code Playgroud)
或这个
CREATE TABLE foo (
id SERIAL,
foo_created_on ABSTIME,
foo_deactivated_on ABSTIME,
PRIMARY KEY (id, foo_created_on),
UNIQUE (id)
);
Run Code Online (Sandbox Code Playgroud)
将作为bar.foo_id的目标.然后吧会有一个简单的参考.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id REFERENCES foo (id),
PRIMARY KEY (id, bar_created_on)
);
Run Code Online (Sandbox Code Playgroud)
如果要引用最初在foo中声明的主键,则必须将该主键存储在bar中.你必须存储所有这些,而不是它的一部分.所以如果不修改foo,你可以像这样构建吧.
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id INTEGER NOT NULL,
foo_created_on ABSTIME NOT NULL,
FOREIGN KEY (foo_id, foo_created_on) REFERENCES foo (id, foo_created_on),
PRIMARY KEY (id, bar_created_on)
);
Run Code Online (Sandbox Code Playgroud)
Dav*_*ter 17
您必须创建单独的外键:
CREATE TABLE bar (
id SERIAL,
bar_created_on ABSTIME,
bar_deactivated_on ABSTIME,
foo_id INT,
FOREIGN KEY (foo_id, created_on) REFERENCES foo (id, created_on),
PRIMARY KEY (id, bar_created_on)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21799 次 |
| 最近记录: |