【发布时间】:2021-05-07 14:16:32
【问题描述】:
我正在 PostgreSQL 中创建一个数据库,并希望在表之间包含多对多关系。我要包括的两个表如下:
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之间的关系。然后我在下面创建了联结表:
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
);
然后我想创建一个表,该表引用上述联结表中的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
);
仪表和寄存器引用相应的连接表列。但是,由于连接表的值不是唯一的,因此我不能简单地为仪表和寄存器列添加外键,因此在运行以下命令时会遇到错误:
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 表中的联结表列?我知道一旦使用内部联接添加了一些数据,就可以使用单独的查询来完成,但是是否可以通过数据库表设置来完成?
【问题讨论】:
标签: postgresql database-design