我想element_type在表(称为discussion)中创建一个允许文本值为"lesson"或"quiz"的列,但如果在该列中插入任何其他值,则会生成错误.
据我所知,我可以element_types使用columns element_id(主键,int)和element_type(唯一的,文本)创建一个单独的表,并foreign_element_id在表discussion引用element_types列中创建一个外键element_id.或者,我可以element_id完全忘记并将其设置element_type为主键.但我想避免创建一个新表.
是否有更简单的方法来限制列中的可能值而不创建新表?
Nul*_*ion 85
你可以添加一个 CHECK CONSTRAINT:
ALTER TABLE distributors
ADD CONSTRAINT check_types
CHECK (element_type = 'lesson' OR element_type = 'quiz');
Run Code Online (Sandbox Code Playgroud)
虽然IMO更清洁的选择是创建一个ENUM:
CREATE TYPE element_type AS ENUM ('lesson', 'quiz');
Run Code Online (Sandbox Code Playgroud)
ffr*_*rey 33
shorcut语法是:
ALTER TABLE distributors
ADD CONSTRAINT check_types
CHECK (element_type IN ('lesson', 'quiz') );
Run Code Online (Sandbox Code Playgroud)
这会将automaticolly转换为:
CONSTRAINT check_types CHECK (element_type::text = ANY (ARRAY['lesson'::character varying, 'quiz'::character varying) )
Run Code Online (Sandbox Code Playgroud)
请享用 ;-)