如何“继承”独特的财产?

a.k*_*kov 4 sql postgresql inheritance

所以,我的问题是"USER"我的数据库中有一个名为 的表,另一个表"STUDENT"继承自它,再加上一些更具体的字段。

创建"USER"看起来像:

CREATE TABLE IF NOT EXISTS "USER"
(
  id       BIGSERIAL PRIMARY KEY,
  login    CHARACTER VARYING(64) UNIQUE NOT NULL,
  password CHARACTER VARYING(32)        NOT NULL DEFAULT 'pass',
  name     TEXT                         NOT NULL,
  email    TEXT,
  role     CHARACTER VARYING(32)        NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

创建"STUDENT"外观,例如:

CREATE TABLE IF NOT EXISTS "STUDENT"
(
  state TEXT,
  hire_date DATE,
  english_level TEXT,
  CONSTRAINT student_pkey PRIMARY KEY (id),
  CONSTRAINT student_login_key UNIQUE(login)
) INHERITS ("USER");
ALTER TABLE "STUDENT" ALTER COLUMN role SET DEFAULT 'stud';
Run Code Online (Sandbox Code Playgroud)

问题在于login,应该是唯一的列实际上在这两个表中分别是唯一的,但“在一起”却不是唯一的。"USER"我的意思是,如果我使用“temp”向表中添加一行login,然后使用相同的行向“STUDENT”中添加一行login,我将在表“USER”中得到两行,具有相同的登录名“temp”并且没有错误。

另一方面,id自动增量的column 效果很好:in 两个表都有一个“序列”。

我应该如何保存表“USER”和“STUDENT”的“联合”中的唯一属性?

Eev*_*vee 5

不幸的是,你不能。该文档甚至提到这是表继承的一个重要限制。

您可能只想拥有两个独立的表,并为 提供student唯一的外键user