Unable to explain this error: there is no unique constraint matching given keys for referenced table

Unable to explain this error: there is no unique constraint matching given keys for referenced table

背景 -
一般来说,我对 Postgres 和 SQL 非常陌生。我正在完成一项家庭作业任务,我们必须在将 ERD 导出为 SQL 和运行宁在 Postgres 中。

我的SQL脚本-
-- 员工头衔 Table

CREATE TABLE "titles" (
    "title_id" VARCHAR   NOT NULL,
    "title" VARCHAR   NOT NULL
);

-- Employees Table
CREATE TABLE "employees" (
    "emp_no" INT   NOT NULL,
    "emp_title_id" INT   NOT NULL,
    "birth_date" DATE   NOT NULL,
    "first_name" VARCHAR   NOT NULL,
    "last_name" VARCHAR   NOT NULL,
    "sex" INT   NOT NULL,
    "hire_date" DATE   NOT NULL,
    CONSTRAINT "pk_employees" PRIMARY KEY (
        "emp_no"
     )
);

-- Salaries Table
CREATE TABLE "salaries" (
    "emp_no" INT   NOT NULL,
    "salary" INT   NOT NULL
);

-- Department Manager
CREATE TABLE "dept_manager" (
    "dept_no" VARCHAR   NOT NULL,
    "emp_no" INT   NOT NULL
);

-- Department Numbers
CREATE TABLE "departments" (
    "dept_no" VARCHAR   NOT NULL,
    "dept_name" VARCHAR   NOT NULL,
    CONSTRAINT "pk_departments" PRIMARY KEY (
        "dept_no"
     )
);

-- Employee vs. Department
CREATE TABLE "dept_emp" (
    "emp_no" INT   NOT NULL,
    "dept_no" VARCHAR   NOT NULL
);

ALTER TABLE "employees" ADD CONSTRAINT "fk_employees_emp_title_id" FOREIGN KEY("emp_title_id")
REFERENCES "titles" ("title_id");

ALTER TABLE "salaries" ADD CONSTRAINT "fk_salaries_emp_no" FOREIGN KEY("emp_no")
REFERENCES "employees" ("emp_no");

ALTER TABLE "dept_manager" ADD CONSTRAINT "fk_dept_manager_dept_no" FOREIGN KEY("dept_no")
REFERENCES "departments" ("dept_no");

ALTER TABLE "dept_manager" ADD CONSTRAINT "fk_dept_manager_emp_no" FOREIGN KEY("emp_no")
REFERENCES "employees" ("emp_no");

ALTER TABLE "dept_emp" ADD CONSTRAINT "fk_dept_emp_emp_no" FOREIGN KEY("emp_no")
REFERENCES "employees" ("emp_no");

ALTER TABLE "dept_emp" ADD CONSTRAINT "fk_dept_emp_dept_no" FOREIGN KEY("dept_no")
REFERENCES "departments" ("dept_no");

问题
我导出 SQL 脚本很好,但是当我 运行

ALTER TABLE "employees" ADD CONSTRAINT "fk_employees_emp_title_id" FOREIGN KEY("emp_title_id")
REFERENCES "titles" ("title_id");

"I get the error message ERROR:there is no unique constraint matching given keys for referenced table "标题" SQL 状态:42830"

我的想法-
...可能是标题 table (title_id) 中的外键与员工 table (emp_title_id) 中的主键之间的名称不匹配导致了这个问题。 title_idemp_title_id 都包含相同的值(即员工 ID,例如 S0002)。

错误信息试图告诉你。外键只能引用一组 uniqueprimary key 的列。但是你的外键目标titles(title_id)不满足这个要求。

所以基本上你需要在 titles table 中声明 title_id 为主键才能创建这个外键。

您还需要对齐列之间的数据类型(这是外键的另一个要求):截至目前,titles(title_id) 被声明为字符串,而引用列是 INT。据推测,源列也应该是 INT

所以:

CREATE TABLE titles (
    title_id int   NOT NULL,
    title VARCHAR   NOT NULL,
    CONSTRAINT pk_titles PRIMARY KEY (title_id)
);

通过此修复,您的整个代码运行良好 in this DB Fiddle

无关说明:你应该避免双引号所有的标识符;这无济于事,以后可能会使事情变得更复杂。

在table中"titles"你忘了定义主键。因此,您不能针对此 table.

创建外键

要解决此问题,table 定义应如下所示:

CREATE TABLE "titles" (
    "title_id" VARCHAR   NOT NULL,
    "title" VARCHAR   NOT NULL,
    CONSTRAINT "pk_titles" PRIMARY KEY (
        "title_id"
     )
);