我正在创建一个表
create tabel xyz
( id number (10) not null,
code char(1) ,
primary key (id)
)
我希望用户拥有代码列的预定义值,如P,S,C。 怎么做? 目前我正在使用代码char(1)DEFAULT('P','S','C') 但有了这个,我收到了错误。 请建议,我也希望此列不为空...
答案 0 :(得分:1)
ENUM
列类型很容易,但可以回来困扰你。我建议添加一个“查找”表,它将容纳您所说的值,然后在主对象表中添加“value_id”列,如:
primary_table:
id
value_id
value_table:
id:
name: #P, S, C
如果您的表很大并且您需要更改任何枚举值,则必须在表上运行alter,这可能意味着显着的停机时间。
答案 1 :(得分:0)
答案 2 :(得分:0)
如果需要向用户显示这些值,最简单的方法是创建另一个表,并使用外键引用。您可以在强制执行CHECK约束的dbms中将其实现为CHECK约束,但向用户提供有效选择会很麻烦。
-- You'll want to restrict permissions on this table pretty tightly. Very few
-- people should be allowed to change it.
create table xyz_codes (
code char(1) primary key CHECK (code in ('P', 'S', 'C'))
);
insert into xyz_codes values ('P'), ('S'), ('C');
create table xyz (
id integer primary key,
code char(1) references xyz_codes (code)
);
完成此操作后,以下INSERT语句将因外键违规而失败。
insert into xyz values (1, 'D');
但这一次会成功。
insert into xyz values (1, 'C');
要选择有效的演示选择以供用户使用,请使用
select code
from xyz_codes
order by code;