删除联结点外键引用的唯一约束 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,它应该引用它的主键。所以在两列上添加一个外键约束。

如果你想要两个单独的外键,你应该直接引用 meterregister

是的。复合外键。

ALTER TABLE "demand_data" 
       ADD FOREIGN KEY ("meter","register") 
           REFERENCES "meter_registers"( "meter_id", "register_id");

注意:没有直接关系,您应该避免那些可怕的双引号。