Database design 我们可以在PSQL中的整数列上创建枚举吗?

Database design 我们可以在PSQL中的整数列上创建枚举吗?,database-design,enums,psql,Database Design,Enums,Psql,我正在使用PSQL,并试图创建一个包含列REQ_TYPE和RESP_STATUS的表。我决定使用ENUM来避免表中的无效条目 我已经使用这个查询成功地为REQ_类型创建了ENUM 创建类型RequestType作为枚举('GET','POST','PUT','DELETE','PATCH') 但是对于RESP_STATUS,当我尝试下面的查询时 创建类型ResponseStatus作为枚举(20020120220430103023044004014040404405413415429500) 我

我正在使用PSQL,并试图创建一个包含列REQ_TYPE和RESP_STATUS的表。我决定使用ENUM来避免表中的无效条目

我已经使用这个查询成功地为REQ_类型创建了ENUM

创建类型RequestType作为枚举('GET','POST','PUT','DELETE','PATCH')

但是对于RESP_STATUS,当我尝试下面的查询时

创建类型ResponseStatus作为枚举(20020120220430103023044004014040404405413415429500)

我得到了答复

错误:“200”处或附近出现语法错误

我相信

创建类型ResponseStatus作为枚举('200','201','202')

这会解决我的问题。但我只想保持RESP_状态为整数


我可以在整数上创建枚举吗?如果是,如何创建?

否,不能在一组整数上创建枚举。从

枚举类型采用一个或多个带引号标签的列表

我不明白你为什么想要整数的枚举。直接使用整数,可以在检查约束中使用,也可以与有效整数表的外键引用一起使用


对于HTTP状态代码(似乎是您的目标),对HTTP状态代码表及其含义的外键引用非常有意义。

不,您不能在一组整数上创建枚举。从

枚举类型采用一个或多个带引号标签的列表

我不明白你为什么想要整数的枚举。直接使用整数,可以在检查约束中使用,也可以与有效整数表的外键引用一起使用


对于HTTP状态代码(似乎是您的目标),对HTTP状态代码表及其含义的外键引用非常有意义。

枚举是一组任意标签,仅与它们自己相等;它们不是对特定类型的值的约束。将类型定义中的字符串视为更像列名或编程语言常量,而不是实际值

您可能正在寻找一个域(请参阅),该域允许您使用一个允许值列表有效地“子类型”整数:

CREATE DOMAIN http_status AS integer 
CHECK (
    VALUE IN 
    (200,201,202,204,301,302,304,400,401,403,404,405,413,415,429,500)
)
但是,如中所建议的,可能更适合使用带有外键约束的普通整数列,该约束指向已知HTTP状态代码的列表,因为这允许:

  • 有关要存储的HTTP状态的详细信息(例如
    说明
    是错误
    是重定向
  • 更容易添加新的HTTP状态(例如,您缺少示例中的
    410已消失
    417预期失败

枚举是一组任意标签,仅与它们自身相等;它们不是对特定类型的值的约束。将类型定义中的字符串视为更像列名或编程语言常量,而不是实际值

您可能正在寻找一个域(请参阅),该域允许您使用一个允许值列表有效地“子类型”整数:

CREATE DOMAIN http_status AS integer 
CHECK (
    VALUE IN 
    (200,201,202,204,301,302,304,400,401,403,404,405,413,415,429,500)
)
但是,如中所建议的,可能更适合使用带有外键约束的普通整数列,该约束指向已知HTTP状态代码的列表,因为这允许:

  • 有关要存储的HTTP状态的详细信息(例如
    说明
    是错误
    是重定向
  • 更容易添加新的HTTP状态(例如,您缺少示例中的
    410已消失
    417预期失败

在许多语言中,枚举中的条目既有标签又有值;我怀疑这就是OP所期待的。例如,在C中,您可以编写
enum STATUS{OK=200,NOT_FOUND=404}
等。或者,他们正在考虑更接近“域”的东西。但是,我同意你的结论,外键在这种情况下更合适;我怀疑这就是OP所期待的。例如,在C中,您可以编写
enum STATUS{OK=200,NOT_FOUND=404}
等。或者,他们正在考虑更接近“域”的东西。但是,我同意您的结论,外键在这种情况下更合适。