在Oracle 10中创建表时,定义“ENUM”数据类型的最佳方法是什么?

时间:2010-09-19 19:15:50

标签: sql oracle oracle10g

例如:我想要一个名为season(= {spring,summer,fall,winter}

的数据类型

1 个答案:

答案 0 :(得分:5)

  1. 定义一个season表,其中有两列:season_idseason_name

    CREATE TABLE "SEASON" (
       "SEASON_ID" NUMBER NOT NULL ENABLE, 
       "SEASON_NAME" VARCHAR2(6 BYTE) NOT NULL ENABLE, 
       CONSTRAINT "SEASON_PK" PRIMARY KEY ("SEASON_ID")
    )
    
  2. season_id列添加到其记录需要季节标识的表中,并创建与season表的外键关系

  3. CHECK约束是下一个选项,但是如果要在多个表中使用这些值,则会很糟糕,因为它们无法集中管理。触发器也是一种选择,但在这种情况下,与CHECK约束相比,触发器更像是用于杀死蚊子的大炮......

    哪个最好?

    引用sql_mommy:

      

    [具有外键关系的单独表格]是最好的   它是管理所需类型的单一位置,它非常灵活,因此您可以根据需要添加/减去值或进行编辑。它也可以实现良好的索引。如果您认为“但这个枚举的内容永远不需要编辑” - 根据我的经验,所有数据类型最终都会变形。例如,如果您有月份列表,则稍后您可以添加月份的各种缩写或与这些月份相关的业务相关关联。使用数据库的关系结构可以提供最大的灵活性和最简单的可维护性。