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

问题描述 投票:1回答:1

我正在尝试在两种方法中为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
);

在维护(添加/编辑/替换值到以后的域)和/或性能(在何处,分组依据,排序依据)方面谈论数百万条记录时,有没有一个优于另一个,或者没有太大区别吗?

sql postgresql performance maintenance
1个回答
2
投票

我不建议使用枚举。如果不删除类型,则不可能特别删除枚举值。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.