Oracle: ошибка ORA-02270 (нет соответствующего уникального или первичного ключа для этого списка столбцов) - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь создать 4 таблицы и связать их вместе, но это показывает эту ошибку ORA-02270. Как я могу это исправить? Есть ли какая-либо ошибка при объявлении внешнего и первичного ключа, которая приводит к этой ошибке.

CREATE table City (
    city_name VARCHAR(128),
    state_name VARCHAR(128),
    population number,
    elevation number,
    PRIMARY KEY (city_name, state_name),
    FOREIGN KEY (city_name) REFERENCES Mayor(city_name)
);

CREATE table State (
    state_name VARCHAR(128) PRIMARY KEY,
    region VARCHAR(128),
    FOREIGN KEY (state_name) REFERENCES City(state_name),
    FOREIGN KEY (state_name) REFERENCES Mayor(state_name),
    FOREIGN KEY (state_name) REFERENCES Governor(state_name)
);

CREATE table Mayor (
    mayor_name VARCHAR(128),
    city_name VARCHAR(128),
    state_name VARCHAR(128),
    party VARCHAR(128),
    PRIMARY KEY (mayor_name, city_name, state_name)
);

CREATE table Governor (
    governor_name VARCHAR(128),
    state_name VARCHAR(128),
    party VARCHAR(128),
    PRIMARY KEY (governor_name, state_name)
);

1 Ответ

2 голосов
/ 28 апреля 2020

Все ваши внешние ключи перепутаны, что приводит к синтаксически неверным отношениям. Я понимаю отношения следующим образом:

  • губернатор ссылается на штат

  • город восстанавливает штат

  • мэр ссылается на город

Возможно, у вас также должна быть таблица region, на которую будет ссылаться таблица state.

Вот Новая версия, которая действительна и реализует вышеуказанные отношения:

CREATE table State (
    state_name VARCHAR(128) PRIMARY KEY,
    region VARCHAR(128)
);

CREATE table Governor (
    governor_name VARCHAR(128),
    state_name VARCHAR(128),
    party VARCHAR(128),
    PRIMARY KEY (governor_name, state_name),
    FOREIGN KEY (state_name) REFERENCES State(state_name)
);

CREATE table City (
    city_name VARCHAR(128),
    state_name VARCHAR(128),
    population number,
    elevation number,
    PRIMARY KEY (city_name, state_name),
    FOREIGN KEY (state_name) REFERENCES State(state_name)
);


CREATE table Mayor (
    mayor_name VARCHAR(128),
    city_name VARCHAR(128),
    state_name VARCHAR(128),
    party VARCHAR(128),
    PRIMARY KEY (mayor_name, city_name, state_name),
    FOREIGN KEY (state_name, city_name) REFERENCES City(state_name, city_name)
);

Демонстрация на DB Fiddle .

...