ОШИБКА: ORA-02264: имя уже используется существующим ограничением - PullRequest
0 голосов
/ 19 апреля 2020
create table ward
(
wnum int primary key,
wname varchar(30),
phoneno int,
wloc varchar(50),
chnursename varchar(20) constraint ward_fk references charge_nurse
);
create table charge_nurse
(
chnurse varchar(20) constraint charge_nurse_pk primary key,
stnum int constraint charge_nurse_fk references staff
);
create table staff
(
stname varchar(20),
stnum int constraint staff_pk primary key,
addr varchar(20),
phoneno int,
stposition varchar(30),
specality varchar(30) unique,
shift varchar(10),
noofhoursperweek int
);
create table generalsupplies
(
itnum int constraint generalsupplies_pk primary key,
itname varchar(20) unique,
quantityinstock int,
reorder varchar(10),
despt varchar(10),
costperunit int
);
create table pharmasupplies
(
dnum int constraint pharmasupplies_pk primary key,
dname varchar(30) unique,
despt varchar(20),
dosage_Mg int,
quantityinstock int,
reorder varchar(10),
costperunit int
);

При создании таблицы ниже я сталкиваюсь с проблемой:

ORA-02264: имя уже используется существующим ограничением

create table centralsupplies
(
wardnum int constraint centralsupplies_fk references ward,
itemnum int constraint centralsupplies_fk references generalsupplies,
drugnum int constraint centralsupplies_fk references pharmasupplies,
quantity_required varchar(20),
staffname varchar(10) references staff(stname),
staffnum int constraint centralsupplies_fk references staff,
regnum int unique,
dateord date,
daterec date
);

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Вы используете 3 раза одно и то же имя ограничения centralsupplies_fk в таблице централизованного снабжения.

3 ограничения = 3 имени ограничения

0 голосов
/ 19 апреля 2020

Ваш оператор создания таблицы имеет четыре внешних ключа, все они называются centralsupplies_fk. Это недопустимо: имена ограничений должны быть уникальными в пределах схемы. Вы должны дать каждому другое имя.

Обычная практика - включать таблицу ссылок в имя ключа. Итак,

create table centralsupplies
(
wardnum int constraint centralsupplies_ward_fk references ward,
itemnum int constraint centralsupplies_generalsupplies_fk references generalsupplies,
drugnum int constraint centralsupplies_pharmasupplies_fk references pharmasupplies,
quantity_required varchar(20),
staffname varchar(10) references staff(stname),
staffnum int constraint centralsupplies_staff_fk references staff,
regnum int unique,
dateord date,
daterec date
)

Также у вас есть другое ограничение внешнего ключа для STAFFNAME, которое вы не назвали. Вам не нужно называть ограничения, система сгенерирует для вас уникальное, но, как правило, это хорошая идея, чтобы назвать их, не в последнюю очередь потому, что легче диагностировать сообщения об ошибках реляционной целостности с осмысленно названными ограничениями.

Однако в этом случае правильным решением будет удалить столбец STAFFNAME . У вас уже есть чужой элемент в таблице STAFF, и вы должны присоединяться к этой таблице всякий раз, когда вам нужно отобразить значение для STAFFNAME. Кроме того, у вас нет уникального ограничения на столбец staff.stname, поэтому оператор внешнего ключа завершится ошибкой: внешние ключи могут ссылаться только на первичные или уникальные ключи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...