所以,我的问题是我的数据库中有一个名为"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'中的唯一属性? “学生”?
答案 0 :(得分:4)
不幸的是,你不能。该文档甚至将此提及为具有表继承的significant limitation。
您可能只想拥有两个独立的表,并为student
提供user
唯一的外键。