Как обновить все еще ссылочный первичный ключ в db2 - PullRequest
1 голос
/ 27 мая 2011

Справочная информация: я программирую приложение, использующее доступ Java для DB2 (V9.5 для UNIX). Для тестирования я сделал это:

CREATE TABLE country(
name VARCHAR(100) NOT NULL,
population BIGINT,
  PRIMARY KEY(name)
);

CREATE TABLE city(
name VARCHAR(100) NOT NULL,
country VARCHAR(100) NOT NULL,
  PRIMARY KEY(name),
  FOREIGN KEY(country) REFERENCES country(name)
);

И вот моя проблема:

DB2 не поддерживает "ON UPDATE CASCADE", и все еще ссылочные первичные ключи не могут изменяться. Так как я могу изменить название страны, пока оно еще используется городом?

Я не ищу решение, которое реализует это в Java (я мог бы вставить новое значение, обновить затронутые города и удалить старое значение). В DB2 должен быть способ сделать это. Будем надеяться.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Если у вас есть текущая схема, то вы можете сделать это в три этапа: -

INSERT INTO COUNTRY VALUES ('Peoples Democratic Republic of Judea', 3000000 - 299 );

UPDATE CITY SET COUNTRY = 'Peoples Democratic Republic of Judea' 
WHERE COUNTRY = 'Free Federal Judean Peoples Republic' ;

DELETE FROM COUNTRY WHERE NAME = 'Free Federal Judean Peoples Republic' ;

NB - 299, чтобы учесть чистку реакционных бегущих собак.

1 голос
/ 27 мая 2011

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

CREATE TABLE country(
  id BIGINT,
  name VARCHAR(100) NOT NULL,
  population BIGINT,
  PRIMARY KEY(id)
);

CREATE TABLE city(
  id BIGINT,
  name VARCHAR(100) NOT NULL,
  country_id BIGINT NOT NULL,
  PRIMARY KEY(id),
  FOREIGN KEY(country_id) REFERENCES country(id)
);

При желании вы можете сделать столбцы name UNIQUE

.
...