С только два фиксированных значений, самый простой способ с a check constraint:
create table users (
id number primary key,
identifier varchar2(30),
password raw(64),
type varchar2(8) not null check (type in ('CUSTOMER', 'COURIER'))
);
check (type in ('CUSTOMER', 'COURIER'))
довольно понятен; Oracle проверяет, что значение, указанное для этого столбца, является одним из этих двух значений. Предполагая, что вы хотите, чтобы он всегда был установлен, not null
гарантирует, что его нельзя оставить пустым.
insert into users (id, identifier, password, type)
values (1, 'Bob', null, 'CUSTOMER');
1 row inserted.
insert into users (id, identifier, password, type)
values (2, 'Alice', null, null);
ORA-01400: cannot insert NULL into ("SCHEMA"."USERS"."TYPE")
insert into users (id, identifier, password, type)
values (2, 'Alice', null, 'INVALID');
ORA-02290: check constraint (SCHEMA.SYS_C00113048) violated
Было бы немного лучше использовать названные ограничения:
create table users (
id number,
identifier varchar2(30),
password raw(64),
type varchar2(8) not null,
constraint users_pk primary key (id),
constraint users_type_ck check (type in ('CUSTOMER', 'COURIER'))
);
В более общем плане, в частности, со значениями, которые могут изменяться, вы бы просмотровой таблицы и внешнего ключа:
create table user_types (
id number,
description varchar2(8),
constraint user_types_pk primary key (id),
constraint user_types_desc_uk unique (description)
);
create table users (
id number,
identifier varchar2(30),
password raw(64),
type_id number not null,
constraint users_pk primary key (id),
constraint users_type_fk foreign key (type_id) references user_types(id)
);
insert into user_types (id, description) values (1, 'CUSTOMER');
insert into user_types (id, description) values (2, 'COURIER');
insert into users (id, identifier, password, type_id)
values (1, 'Bob', null, 1);
1 row inserted.
insert into users (id, identifier, password, type_id)
values (2, 'Alice', null, null);
ORA-01400: cannot insert NULL into ("SCHEMA"."USERS"."TYPE_ID")
insert into users (id, identifier, password, type_id)
values (2, 'Alice', null, 3);
ORA-02291: integrity constraint (SCHEMA.USERS_TYPE_FK) violated - parent key not found
Вы действительно мужчина [объект] (http://docs.oracle.com/cd/E11882_01/appdev.112/e11822/adobjint.htm#ADOBJ001); или вы хотите, чтобы ваша таблица пользователя имела столбец типа 'type', который ограничен этими двумя значениями; или у вас есть другая таблица, которая содержит эти два значения (но может добавить другие), и вам нужна ссылочная целостность между ними? –
отредактировал вопрос, чтобы указать мою проблему –