下面的示例表結構給出了一個錯誤:沒有唯一的約束與參考表的給定鍵匹配,並且一直盯着它,現在我無法弄清楚在這種情況下出現這種錯誤的原因。什麼是導致錯誤:沒有唯一的約束匹配參考表給定的鍵?
BEGIN;
CREATE TABLE foo (
name VARCHAR(256) PRIMARY KEY
);
CREATE TABLE bar(
pkey SERIAL PRIMARY KEY,
foo_fk VARCHAR(256) NOT NULL REFERENCES foo(name),
name VARCHAR(256) NOT NULL,
UNIQUE (foo_fk,name)
);
CREATE TABLE baz(
pkey SERIAL PRIMARY KEY,
bar_fk VARCHAR(256) NOT NULL REFERENCES bar(name),
name VARCHAR(256)
);
COMMIT;
運行上面的代碼提供了以下錯誤,這沒有任何意義對我來說,任何人都可以解釋爲什麼這個錯誤出現。我使用的是Postgres 9.1
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "foo_pkey" for table "foo"
NOTICE: CREATE TABLE will create implicit sequence "bar_pkey_seq" for serial column "bar.pkey"
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "bar_pkey" for table "bar"
NOTICE: CREATE TABLE/UNIQUE will create implicit index "bar_foo_fk_name_key" for table "bar"
NOTICE: CREATE TABLE will create implicit sequence "baz_pkey_seq" for serial column "baz.pkey"
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "baz_pkey" for table "baz"
ERROR: there is no unique constraint matching given keys for referenced table "bar"
********** Error **********
ERROR: there is no unique constraint matching given keys for referenced table "bar"
SQL state: 42830
爲什麼不將聲明的PK視爲唯一約束?它不像你可以有一個非唯一的PK ... – amphibient 2016-09-07 18:14:35
它必須在它「指向」的表上是唯一的,因爲如果它不是,數據庫引擎將無法知道你實際上指的是哪一行。 – 2016-09-07 18:15:48