Как вы говорите, это для универсального проекта, и вы должны иметь STAFF_LEVEL
в качестве первичного ключа ...
Говорит ли он, что STAFF_LEVEL
ЕДИНСТВЕННЫЙ столбец, который должен быть в ПЕРВИЧНОМ КЛЮЧЕ?
Вы можете создать составной ПК с помощью:
CREATE TABLE STAFF_LVL
(
STAFF_LEVEL NUMBER(1,0),
MANAGER VARCHAR2(10),
OPERATOR VARCHAR2(10),
ENGINEER VARCHAR2(10),
PRIMARY KEY (STAFF_LEVEL, MANAGER, OPERATOR, ENGINEER) ENABLE
);
Таким образом, вы можете ввести два STAFF_LEVEL
значения 3, если они не имеют одинаковых значений для других столбцов.
Хотя ваши данные могут вызвать проблемы.
Вы уполномочены колонны?
Не могли бы вы добавить сгенерированный столбец PK на основе последовательности?
Что-то вроде:
CREATE TABLE STAFF_LVL
(
ID NUMBER,
STAFF_LEVEL NUMBER(1,0),
MANAGER VARCHAR2(10),
OPERATOR VARCHAR2(10),
ENGINEER VARCHAR2(10),
PRIMARY KEY (ID, STAFF_LEVEL) ENABLE
);
CREATE SEQUENCE id_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 1;
insert into staff_lvl values (id_seq.nextval, 1,'N','N','Y');
insert into staff_lvl values (id_seq.nextval, 3,'N','Y','Y');
insert into staff_lvl values (id_seq.nextval, 7,'Y','Y','Y');
insert into staff_lvl values (id_seq.nextval, 3,'N','Y','Y');
По сути, ПК ДОЛЖЕН быть уникальным.
Будучи дерзким, если вам поручены столбцы, данные (которые не уникальны) и столбец PK, вы можете создать таблицу, первичный ключ и просто отключить PK. Он удовлетворяет критериям вашего проекта (и ужасно использует БД), но допускает неуникальные данные, хотя "технически" все еще имеет PK в таблице (даже если он отключен) ...