簡體   English   中英

PostgreSQL 用戶定義類型枚舉與外鍵 - 維護和性能

[英]PostgreSQL user defined type enum vs foreign key - maintenance and performance

我試圖在 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上的索引,那么這個版本應該和帶有外鍵的版本一樣高效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM