删除联结点外键引用的唯一约束 table
Dropping unique constraint on foreign key reference of junction table
我正在 PostgreSQL 中创建一个数据库,并希望在 table 之间包含多对多关系。我要包含的两个table如下:
CREATE TABLE "meter" (
"id" integer PRIMARY KEY,
"nmi" integer,
"next_scheduled_read_date" timestamp
);
CREATE TABLE "register" (
"id" text PRIMARY KEY,
"value" text
);
我想要的多对多关系是meter id和register id之间的关系。然后我在下面创建了连接 table:
CREATE TABLE "meter_registers" (
"meter_id" integer NOT NULL,
"register_id" text NOT NULL,
PRIMARY KEY ("meter_id", "register_id"),
FOREIGN KEY ("meter_id") REFERENCES "meter" ("id") ON UPDATE CASCADE,
FOREIGN KEY ("register_id") REFERENCES "register" ("id") ON UPDATE CASCADE
);
然后我想创建一个 table,它引用来自上面结点 table 的 meter_id 和 register_id 值,其结构如下:
CREATE TABLE "demand_data" (
"upload_id" integer PRIMARY KEY,
"nmi" integer,
"meter" integer,
"register" text,
"start" timestamp,
"end" timestamp,
"duration" Time,
"demand" double precision
);
其中仪表和寄存器引用相应的连接点 table 列。但是,由于连接 table 的值不是唯一的,我不能简单地为仪表和寄存器列添加外键,所以当我 运行 时我 运行 出错了以下:
ALTER TABLE "demand_data" ADD FOREIGN KEY ("meter") REFERENCES "meter_registers" ("meter_id");
ALTER TABLE "demand_data" ADD FOREIGN KEY ("register") REFERENCES "meter_registers" ("register_id");
ERROR: there is no unique constraint matching given keys for referenced table "meter_registers"
有没有办法在没有外键约束的情况下引用 demand_data table 中的联结 table 列?我知道一旦使用内部联接添加了一些数据,就可以进行单独的查询,但是,是否可以通过数据库 table 设置来完成?
如果 demand_data
引用 meter_registers
,它应该引用它的主键。所以在两列上添加一个外键约束。
如果你想要两个单独的外键,你应该直接引用 meter
和 register
。
是的。复合外键。
ALTER TABLE "demand_data"
ADD FOREIGN KEY ("meter","register")
REFERENCES "meter_registers"( "meter_id", "register_id");
注意:没有直接关系,您应该避免那些可怕的双引号。
我正在 PostgreSQL 中创建一个数据库,并希望在 table 之间包含多对多关系。我要包含的两个table如下:
CREATE TABLE "meter" (
"id" integer PRIMARY KEY,
"nmi" integer,
"next_scheduled_read_date" timestamp
);
CREATE TABLE "register" (
"id" text PRIMARY KEY,
"value" text
);
我想要的多对多关系是meter id和register id之间的关系。然后我在下面创建了连接 table:
CREATE TABLE "meter_registers" (
"meter_id" integer NOT NULL,
"register_id" text NOT NULL,
PRIMARY KEY ("meter_id", "register_id"),
FOREIGN KEY ("meter_id") REFERENCES "meter" ("id") ON UPDATE CASCADE,
FOREIGN KEY ("register_id") REFERENCES "register" ("id") ON UPDATE CASCADE
);
然后我想创建一个 table,它引用来自上面结点 table 的 meter_id 和 register_id 值,其结构如下:
CREATE TABLE "demand_data" (
"upload_id" integer PRIMARY KEY,
"nmi" integer,
"meter" integer,
"register" text,
"start" timestamp,
"end" timestamp,
"duration" Time,
"demand" double precision
);
其中仪表和寄存器引用相应的连接点 table 列。但是,由于连接 table 的值不是唯一的,我不能简单地为仪表和寄存器列添加外键,所以当我 运行 时我 运行 出错了以下:
ALTER TABLE "demand_data" ADD FOREIGN KEY ("meter") REFERENCES "meter_registers" ("meter_id");
ALTER TABLE "demand_data" ADD FOREIGN KEY ("register") REFERENCES "meter_registers" ("register_id");
ERROR: there is no unique constraint matching given keys for referenced table "meter_registers"
有没有办法在没有外键约束的情况下引用 demand_data table 中的联结 table 列?我知道一旦使用内部联接添加了一些数据,就可以进行单独的查询,但是,是否可以通过数据库 table 设置来完成?
如果 demand_data
引用 meter_registers
,它应该引用它的主键。所以在两列上添加一个外键约束。
如果你想要两个单独的外键,你应该直接引用 meter
和 register
。
是的。复合外键。
ALTER TABLE "demand_data"
ADD FOREIGN KEY ("meter","register")
REFERENCES "meter_registers"( "meter_id", "register_id");
注意:没有直接关系,您应该避免那些可怕的双引号。