create table status
(
id integer primary key,
name text not null
);
insert into status (id, name)
values
(1, 'Completed'),
(2, 'Pending'),
(3, 'Failed'),
(4, 'Created');
create table some_table
(
id integer primary key,
status_id integer not null references status
);
create table some_table
(
id integer primary key,
status text not null,
constraint check_status
status in ('Completed', 'Pending', 'Failed', 'Created')
);
这样做的缺点是,您要一遍又一遍地存储相同的值,因此与外键解决方案相比,表的大小会更大。 第三个选项是使用enum type
create type status_type AS ENUM (''Completed', 'Pending', 'Failed', 'Created');
然后使用表中的类型:
create table some_table
(
id integer primary key,
status status_type not null
);
2条答案
按热度按时间yacmzcpb1#
执行此操作的正确方法是使用查找表和外键:
这是在关系数据库中处理这个问题的最灵活的方法。
如果您知道您几乎不会更改这些值,则可以使用检查约束:
这样做的缺点是,您要一遍又一遍地存储相同的值,因此与外键解决方案相比,表的大小会更大。
第三个选项是使用enum type
然后使用表中的类型:
这与外键解决方案具有类似的存储要求,但将状态显示为“明文”。
ezykj2lf2#