如何“继承”UNIQUE属性?

时间:2014-07-20 21:45:35

标签: 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
);

创建"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';

问题是列login(应该是唯一的)在这两个表中实际上是唯一的,但不是唯一的“在一起”。我的意思是,如果我使用"USER"'temp'在表login中添加一行,然后在具有相同login的“学生”中添加一行,我将获得两行我的表“USER”具有相同的登录“temp”并且没有错误。

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

如何保存“USER”&表格的'union'中的唯一属性? “学生”?

1 个答案:

答案 0 :(得分:4)

不幸的是,你不能。该文档甚至将此提及为具有表继承的significant limitation

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