один ко многим уникальным наборам oracle db

Я не уверен, как создать отношение «один ко многим», но ограничьте множество элементов как «набор» для каждого уникального первичного ключа.

БД: Oracle 11g

Пример:

Таблица ПК:

CUST(PK)
100
200

Действительные данные таблицы FK:

CUST(FK) | ITEM
100 | 101
100 | 102
200 | 101
200 | 102

Недопустимые данные таблицы FK:

CUST(FK) | ITEM
100 | 101
100 | 101
200 | 104
200 | 104

Любые предложения, как настроить такие отношения? Я хотел бы ограничить уникальность, чтобы было невозможно добавить значение в таблицу FK, которое нарушает указанную выше уникальность «набора».

Можно ли это сделать исключительно на стороне БД Oracle или я должен применять это из кода доступа к Java?




Ответы (2)


Просто создайте уникальное ограничение с двумя столбцами: CUST и ПУНКТ, похожий на:

ALTER TABLE secondtable
ADD CONSTRAINT custItem UNIQUE (CUST, ITEM)

Создайте это ограничение в дополнение к вашему внешнему ключу

person cha    schedule 06.03.2013
comment
Это сделало это! Очевидно, я ничего не знаю о базах данных :) - person etech; 07.03.2013

это может помочь вам... создайте свои таблицы следующим образом....

create table cust_id 
           (cus_id number primary key) 
                  tablespace ts1;
  create table Valid_FK_Tabl
            (cus_id number,item number,constraints pk1 primary key(cus_id,item))
                  tablespace ts1 ;
  alter table Valid_FK_Tabl 
             add constraints fk1 foreign key(cus_id) 
                    references schema2.cust_id(cus_id);
person Thiyagu ATR    schedule 06.03.2013
comment
Спасибо, это работает для создания новых таблиц, но, поскольку они у меня уже были, я использовал метод изменения таблицы cha. - person etech; 07.03.2013