Попытка обновить атрибут базы данных, который является первичным ключом, а также внешним ключом для других таблиц - PullRequest
0 голосов
/ 25 апреля 2018

Попытка обновить атрибут в имени COLUMN в таблице SKILL, но это мне не позволяет, потому что в таблице SPOSSESSED и SREQUIRED есть внешние ключи CONSTRAINT.

Эти внешние ключи также указываются как первичные ключи CONSTRAINT и поэтому не могут иметь значение NULL.Как мне поступить с этим?

Вот таблицы:

CREATE TABLE SKILL(
sname         VARCHAR(30)     NOT NULL, /* Skill name */
CONSTRAINT SKILL_pkey PRIMARY KEY ( sname ) );

CREATE TABLE SREQUIRED(
sname         VARCHAR(30)     NOT NULL, /* Skill name*/
requires      VARCHAR(30)     NOT NULL, /* Skill required*/
slevel        DECIMAL(2)      NOT NULL, /* Level required*/
CONSTRAINT SREQUIRED_pkey PRIMARY KEY ( sname, requires ),
CONSTRAINT SREQUIRED_fkey1 FOREIGN KEY ( sname) REFERENCES SKILL( sname ),
CONSTRAINT SREQUIRED_fkey2 FOREIGN KEY ( requires ) REFERENCES SKILL( sname ) );

CREATE TABLE SPOSSESSED(
anumber     DECIMAL(6)  NOT NULL, /* Applicant number*/
sname       VARCHAR(30) NOT NULL, /* Skill name*/
slevel      DECIMAL(2)  NOT NULL, /* Skill level*/
CONSTRAINT SPOSSESSED_pkey PRIMARY KEY ( anumber, sname ), 
CONSTRAINT SPOSSESSED_fkey1 FOREIGN KEY ( anumber ) REFERENCES APPLICANT ( anumber ) ON DELETE CASCADE,
CONSTRAINT SPOSSESSED_fkey2 FOREIGN KEY ( sname )REFERENCES SKILL ( sname ),
CONSTRAINT SPOSSESSED_check1 CHECK ( slevel IN ( 1,2,3,4,5,6,7,8,9,10 ) ) );

1 Ответ

0 голосов
/ 25 апреля 2018

Существует два возможных решения

  1. Создать столбец Id в таблице SKILL и использовать этот столбец ID в других таблицах в качестве внешнего ключа.
  2. Добавить правило CASCADE ON UPDATE для внешних ключей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...