Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Можно ли создать внешний ключ с условием  [new]
csis
Member

Откуда:
Сообщений: 19
Структура базы:
CREATE TABLE "HR"."C" 
   (	"C_OBJECT_ID" NUMBER(*,0), 
	"C_TYPE" NUMBER(*,0), 
	"C_DATA" VARCHAR2(255)
   );

  CREATE TABLE "HR"."M" 
   (	"M_ID" NUMBER(*,0), 
	"M_NAME" VARCHAR2(32), 
	 PRIMARY KEY ("M_ID")
   );

  CREATE TABLE "HR"."U" 
   (	"U_ID" NUMBER(*,0), 
	"U_NAME" VARCHAR2(32), 
	 PRIMARY KEY ("U_ID")
   );

можно ли сделать что-то подобное:

ALTER TABLE c
add CONSTRAINT fk_m
  FOREIGN KEY (c_object_id, c_type)
  REFERENCES m(m_id, 1);

ALTER TABLE c
add CONSTRAINT fk_u
  FOREIGN KEY (c_object_id, c_type)
  REFERENCES u(u_id, 2);

Заранее спасибо за ответ.
27 июл 10, 11:45    [9163440]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать внешний ключ с условием  [new]
Lecter
Member

Откуда: Киев
Сообщений: 2032
csis,

Введите поле дополнительное которое будет принимать значения 1,2,... и повесьте стандартный констрейт.
27 июл 10, 11:49    [9163482]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать внешний ключ с условием  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
csis,

В таблицу "HR"."C" добавь две колонки "M_ID" и "U_ID" и уже ссылайся по-людски ...
Можешь удалить колонку "C_OBJECT_ID" или добавить ограничение
("C_OBJECT_ID"="M_ID"   AND "C_TYPE" = 1) OR ("C_OBJECT_ID"="U_ID"   AND "C_TYPE" = 2)
27 июл 10, 12:55    [9164046]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать внешний ключ с условием  [new]
csis
Member

Откуда:
Сообщений: 19
Спасибо за ответ. Еще такой вопрос, я немного переделал таблицу, как сделать, что бы два внешних ключа в таблице С не блокировани друг друга
  
CREATE TABLE "HR"."C" 
   (	"C_O_ID" NUMBER(*,0), 
	"C_TYPE" NUMBER(*,0), 
	"C_DATA" VARCHAR2(255), 
	 CONSTRAINT "fk_c_u" FOREIGN KEY ("C_O_ID")
	  REFERENCES "HR"."U" ("U_ID") ENABLE, 
	 CONSTRAINT "fk_c_m" FOREIGN KEY ("C_O_ID")
	  REFERENCES "HR"."M" ("M_ID") ENABLE
   );

 CREATE TABLE "HR"."M" 
   (	"M_ID" NUMBER(*,0), 
	"M_NAME" VARCHAR2(32), 
	 PRIMARY KEY ("M_ID")
	 CONSTRAINT "check_id" CHECK (m_id < 10000) ENABLE
   );

 CREATE TABLE "HR"."U" 
   (	"U_ID" NUMBER(*,0), 
	"U_NAME" VARCHAR2(32), 
	 PRIMARY KEY ("U_ID")
	 CONSTRAINT "chack_id" CHECK (u_id > 10000) ENABLE
   );
27 июл 10, 13:00    [9164076]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать внешний ключ с условием  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
csis
Спасибо за ответ. Еще такой вопрос, я немного переделал таблицу, как сделать, что бы два внешних ключа в таблице С не блокировани друг друга
  
..

вы удачно сделали ограничения, которым не удовлетворяет ничто
27 июл 10, 13:09    [9164155]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать внешний ключ с условием  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5931
Для генерализации пользуйтесь объектными типами Oracle с наследованием.

Натягивание объектной модели на реляционную это изврат. Пусть им СУБД занимается.
27 июл 10, 13:14    [9164197]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать внешний ключ с условием  [new]
csis
Member

Откуда:
Сообщений: 19
Спасибо, буду разбираться дальше.
27 июл 10, 13:27    [9164316]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить