Внешний ключ Oracle

Итак, у меня есть две таблицы

CREATE TABLE Client(
ID NUMBER(10) NOT NULL, (PRIMARY KEY)
Name VARCHAR(30) NOT NULL,
Surname VARCHAR(30) NOT NULL,
Phone NUMBER(11) NOT NULL,
Email VARCHAR(70));

CREATE TABLE Boss(
B_Surname VARCHAR(30) NOT NULL, (PRIMARY KEY)
B_Name VARCHAR(30) NOT NULL);

Мне нужно поместить внешний ключ (B_surname из таблицы Boss) в таблицу Client. Я пытался использовать ALTER TABLE:

ALTER TABLE Client ADD CONSTRAINT Boss_Client_fk FOREIGN KEY (B_Surname) REFERENCES Client(ID);

После этого я получил ошибки. Спасибо за помощь.

1 ответ

Решение

Я думаю, что вы хотите следующее. Обратите внимание, что вы, вероятно, должны использовать VARCHAR2 скорее, чем VARCHAR в Oracle. Сейчас они работают одинаково, но есть вероятность, что Oracle изменит функциональность для VARCHAR привести его в соответствие со стандартом ANSI (в котором пустые строки '' отличаются от NULLс... но я отвлекся)

CREATE TABLE client
( id NUMBER(10) NOT NULL PRIMARY KEY
, name VARCHAR2(30) NOT NULL
, surname VARCHAR2(30) NOT NULL
, phone NUMBER(11) NOT NULL
, email VARCHAR2(70) );

CREATE TABLE boss
( b_surname VARCHAR2(30) NOT NULL PRIMARY KEY
, b_Name VARCHAR2(30) NOT NULL );

А потом:

ALTER TABLE client ADD CONSTRAINT boss_client_fk FOREIGN KEY (surname) REFERENCES boss (b_surname);

Немного странно, что столбец назван surname в CLIENT а также b_surname в BOSS,

Если ты хочешь b_surname в BOSS ссылаясь на surname в CLIENT - тогда нужно сделать CLIENT.surname первичный ключ или, по крайней мере, уникальный.

Другие вопросы по тегам