gpt4 book ai didi

postgresql - 存储一组 postgres 枚举值以供重用的正确抽象是什么?

转载 作者:行者123 更新时间:2023-12-03 17:49:40 25 4
gpt4 key购买 nike

我有以下枚举和表格:

CREATE TYPE public.event_type as ENUM (
'eat_apple',
'eat_banana',
'brush_teeth'
);

CREATE TABLE public.events (
id integer not null,
type public.event_type,
created_at timestamp without time zone
);

我针对此表编写了很多查询,这些查询仅与事件类型的子集(eat_appleeat_banana)有关。

我可以用 WHERE type IN ('eat_banana', 'eat_apple') 编写这些查询中的每一个子句,但是将来很有可能需要添加 eat_pear事件类型。

Postgres 中有哪些可用的抽象来存储这些枚举值的子集,以便在整个查询中重用,以一种将来可以扩展子集的方式,以便现有查询考虑到这一点?

最佳答案

如果它是“默认”类型,我会完全放弃枚举并使 event_type 成为一个包含标志的适当表。

create table event_type
(
id integer primary key,
name text not null unique,
is_default_type boolean not null default true
);

create table events
(
id integer not null,
type integer not null references event_type,
created_at timestamp without time zone
);

要找到具有默认子集的那些,您可以执行以下操作:

select e.*
from events e
join event_type et on et.id = e.type and et.is_default_type;

要维护默认子集,您只需更改标志。为方便起见,您可以根据上述查询创建一个 View ,这样您就无需担心连接问题。

如果您使用 IN 运算符而不是连接创建 View ,它也可以自动更新。

关于postgresql - 存储一组 postgres 枚举值以供重用的正确抽象是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60331788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com