gpt4 book ai didi

sql - PostgreSQL 用户定义类型枚举 vs 外键 - 维护和性能

转载 作者:行者123 更新时间:2023-11-29 12:49:16 24 4
gpt4 key购买 nike

我正在尝试在 PostgreSQL 表中的列的用户定义值集的两种方法之间做出决定。

用户定义的数据类型:

CREATE TYPE track_class AS ENUM(
'Easy', 'Medium', 'Difficult', 'Very difficult', 'NA'
);

外键:
CREATE TABLE track_class (
class TEXT PRIMARY KEY
);

INSERT INTO track_class (class) VALUES ('Easy'), ('Medium'), ('Difficult'), ('Very difficult'), ('NA');

CREATE TABLE tracks (
track_class TEXT REFERENCES track_class (class) ON UPDATE CASCADE
);

从维护(稍后向域添加/编辑/替换值)和/或性能(其中,分组依据,排序依据)的角度来说,谈论数百万条记录时,是否有任何一个优于另一个,或者没有太大区别?

最佳答案

我不建议使用枚举。不删除类型就不可能特别删除枚举值。

我想很容易处理并且在建模方面最好的是你提到的带有外键的新表。如果在外键列上放置索引,这里的性能应该没有问题。

另一种选择是使用 CHECK -约束:

ALTER TABLE mytable
ADD CONSTRAINT myconstraint_only_some_values
CHECK (mycolumn IN ('Easy', 'Medium', 'Difficult', 'Very difficult', 'NA'));

也许这在您的数据中更“可见”,您不必考虑加入。如果您没有忘记 mycolumn 上的索引,这个版本应该和带有外键的版本一样高效。

关于sql - PostgreSQL 用户定义类型枚举 vs 外键 - 维护和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58108345/

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