2012-01-26 3 views
0

Я пытаюсь добавить первичный и внешний ключ во вложенную таблицу, пытаясь понять, как это сделать.Первичный и внешний ключ вложенной таблицы в Oracle

Это то, что у меня есть;

create or replace type profile as object 
(
id VARCHAR2(10), --- Suppose to be Primary Key 
userID VARCHAR2(10) --- Suppose to be Foreign Key for user table 
); 

create or replace type profile_nest as table of profile; 

CREATE OR REPLACE TYPE user_t UNDER group_T 
(profile profile_nest_ty,); 


CREATE TABLE user OF user_t 
(id NOT NULL, 
PRIMARY KEY (id), 
nested table profile store as profile_storage_tbl; 

Теперь проблема эта часть, пытается сделать внешний ключ -

alter table profile_storage_tbl add CONSTRAINT fk_userID FOREIGN KEY (userID) 
REFERENCES user(id); 

дает эту ошибку -

*Error starting at line 3 in command:
alter table profile_storage_tbl add CONSTRAINT fk_userID FOREIGN KEY (userID) REFERENCES user(id)
Error report:
SQL Error: ORA-30730: referential constraint not allowed on nested table column 30730. 00000 - "referential constraint not allowed on nested table column"
*Cause: An attempt was made to define a referential constraint on a nested table column.
Action: Do not specify referential constraints on nested table columns.

ответ

1

Либо создать 2 отдельные таблицы profile_storage_tbl и user с внешним ключом между ними или вы создаете profile_storage_tbl в виде вложенной таблицы в таблице user. Не имеет смысла пытаться делать то и другое. (Фактически, вложенные таблицы не имеют для меня никакого смысла, но это другое дело!)

+0

Здравствуйте, спасибо, что ответ. Я создал profile_storage_tbl как вложенную таблицу в пользовательской таблице. Проблема в том, что у меня есть другая таблица, в которой мне нужно будет иметь отношение к вложенной таблице profile_storage_tbl. Поэтому мне нужно знать, как я собираюсь добавить ограничения. – user1165419

1

Как и в тексте исключения, создание ограничения внешнего ключа на вложенных столбцах таблицы не допускается (Oracle 11).

Существует обходное решение, описанное здесь: http://ksun-oracle.blogspot.com/2011/05/foreign-key-on-nested-table.html. Но нет никакой гарантии, что это будет работать на следующем выпуске оракула.

+0

Спасибо. Я хотел спросить, могут ли вложенные таблицы иметь первичные ключи или уникальные идентификаторы для каждой строки? – user1165419

+0

Да к ограничению первичного ключа и уникальному ограничению. Последнее вы можете увидеть в связанной статье. Здесь вы можете увидеть пример для первичного ключа: http: //asktom.oracle.com/pls/asktom/f? P = 100: 11: 0 :::: P11_QUESTION_ID: 2318607631616 # 4040376500346333254 –

0

За сценой oracle создаст две таблицы profile_storage_tbl и пользователя, тогда как у profile_storage_tbl есть внешний ключ для пользователя. Вы можете сделать это самостоятельно, при этом рекомендуется лучше контролировать освобождения (также к другим таблицам).