2014-12-09 10 views
-3

есть ли кто-нибудь, кто может помочь мне создать внешний ключ для моей таблицы состояния. Мне нужно разместить ограничение внешнего ключа на код в таблице состояния, ссылаясь на id в таблице зданий.создать внешний ключ в oracle

TABLE building 
(
    build_name   VARCHAR2(50,0) NOT NULL, 
    id   NUMBER (38,0) NOT NULL, 
    mapid    NUMBER (10,0) NOT NULL 
); 

TABLE STATUS 
(
    code   VARCHAR(2 BYTE) NOT NULL, 
    status_name VARCHAR2(40 BYTE) NOT NULL, 
); 

Bulding таблица имеет ограничение building_gmidx с id в качестве первичного ключа.

+1

Учебник является хорошим местом для начала: https://docs.oracle.com/cd/E11882_01/appdev.112/e10766/tdddg_objects.htm#TDDDG196 –

+1

STATUS.CODE имеет совершенно другой тип данных ('VARCHAR2 (2 BYTE) '), чем BUILDING.ID (' NUMBER (38,0) '); таким образом, похоже, что они не содержат одинаковых значений. Должен ли быть столбец STATUS_CODE в таблице BUILDING? –

ответ

0

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

ALTER TABLE STATUS ADD (
CONSTRAINT status_fk_building FOREIGN KEY (code) 
REFERENCES building (id) 
ENABLE VALIDATE); 
+0

Не работает. Я получаю эту ошибку: Ошибка SQL: ORA-02267: тип столбца несовместим со ссылочным типом столбца 02267. 00000 - «тип столбца несовместим со ссылочным типом столбца» * Причина: Тип данных ссылочного столбца несовместим с – user3486513

0

Вы оставили из CREATE TABLE *name*, чтобы сэкономить время при написании вопроса? Первое, что я вижу, это то, что ваш внешний ключ должен иметь тот же тип и размер данных, что и ваш основной ключ. Если таблицы уже существуют код будет:

ALTER TABLE status MODIFY (code NUMBER(38)); 

Оттуда вам нужно будет

ALTER TABLE status ADD FOREIGN KEY (code) REFERENCES (building_gmidx) 

Почему ограничение для создания первичного ключа с именем building_gmidx и простой идентификатор столбца ?? Все атрибуты Normalized table должны быть уникальными. Было бы лучше, если бы вы просто назвали столбец «id» building_gmidx. На всякий случай, если другие типы идентификаторов добавлены позже, вам не нужно думать о том, к какой таблице относится «id». Дайте мне знать, если это сработает.

Смежные вопросы