Можно ли установить уникальное ограничение в качестве внешнего ключа в другой таблице? - PullRequest
7 голосов
/ 24 августа 2009

Можно ли установить уникальное ограничение в качестве внешнего ключа в другой таблице? Если да, как бы вы объявили об этом?

Как бы вы выбрали назначение ключа кандидата? Возможно ли это?

Пример: У меня есть таблица продуктов, которая состоит из:

prod_id, prod_name, prod_price, QOH

Где я хочу, чтобы prod_name ссылался на таблицу отправки:

desp_id, prod_name, shelfLoc, quantity

Я думал о том, что мне может понадобиться создать уникальное ограничение, которое будет выглядеть так:

ALTER TABLE product
ADD CONSTRAINT prod_nameID_uc 
UNIQUE (prod_id,prod_name)

Что мне интересно, так это то, можно ли ссылаться на уникальный ключ как на внешний ключ в таблице отправки. Я должен иметь prod_name вместо prod_id в таблице отправки, чтобы информация была более значимой для пользователя при ее чтении, а не для просмотра номера идентификатора. Я использую iSQL плюс на оракуле.

Ответы [ 2 ]

6 голосов
/ 24 августа 2009

Вполне возможно ссылаться на УНИКАЛЬНОЕ ограничение в Oracle FOREIGN KEY:

SQL> create table products (
  2      prod_id number not null
  3      , prod_name varchar2 (30) not null
  4      , constraint prod_pk primary key ( prod_id )
  5      , constraint prod_uk unique ( prod_name )
  6      )
  7  /

Table created.

SQL> create table despatch (
  2      desp_id number not null
  3      , prod_name
  4      , constraint desp_pk primary key ( desp_id )
  5      , constraint desp_prod_pk foreign key ( prod_name )
  6          references products ( prod_name )
  7      )
  8  /

Table created.

SQL>

Однако это плохая практика. Основной причиной использования первичного ключа наряду с уникальным ключом является предоставление синтетического ключа для использования во внешних ключах. Я был бы вами, я был бы обеспокоен, что ваши учителя дают вам задание, пронизанное плохой практикой

2 голосов
/ 24 августа 2009

Это обязательно зависит от СУБД. В СУБД, с которыми я знаком, ограничение уникальности и ограничение внешнего ключа являются отдельными соображениями, вы можете иметь и то и другое, и они оба действуют нормально при объединении.

...