【发布时间】:2021-01-06 01:25:48
【问题描述】:
我创建了以下两个表格来映射学生和教师:
CREATE TABLE students(
student_id SERIAL PRIMARY KEY,
first_name NOT NULL VARCHAR(50),
last_name NOT NULL VARCHAR(50),
phone VARCHAR(15) UNIQUE NOT NULL CHECK (phone NOT LIKE '%[^0-9]%'),
email VARCHAR(30) UNIQUE NOT NULL CHECK (email NOT LIKE '%@%'),
graduationYear SMALLINT CHECK (graduationYear > 1900)
);
CREATE TABLE teachers(
teacher_id SERIAL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
departament VARCHAR(40) NOT NULL,
email VARCHAR(30) UNIQUE NOT NULL CHECK (email NOT LIKE '%@%'),
phone VARCHAR(15) UNIQUE NOT NULL CHECK (phone NOT LIKE '%[^0-9]%')
);
如您所见,两个表都有phone 和email 的列。我希望这两个对于每个人来说都是独一无二的。
我如何引入一个约束来检查在students 表中引入的电话号码/电子邮件是否不存在于teachers 表中?
是否有任何类型的关键字可以像 UNIQUE 但在多个表上使用,或者我应该采取其他方法吗?
编辑:正如@a_horse_with_no_name 所指出的,LIKE 不支持正则表达式。我应该使用SIMILAR TO。
【问题讨论】:
-
与您的问题无关,但
LIKE不支持正则表达式。如果您想坚持使用标准 SQL,您要么需要 similar to,要么需要 posix regex
标签: sql postgresql database-design constraints unique-constraint