7

一意制約を別のテーブルの外部キーとして設定することはできますか? はいの場合、どのように宣言しますか?

候補キーの割り当てはどのように行いますか? 出来ますか?

例: 次のもので構成される製品テーブルがあります。

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)

私が疑問に思っているのは、ディスパッチテーブルで一意のキーを外部キーとして参照できるかどうかです。ID番号を見るのではなく、それを読むときに情報がユーザーにとってより意味のあるものになるように、ディスパッチテーブルではprod_nameなく持っている必要があります。prod_idOracleでiSQL plusを使用しています。

4

2 に答える 2

7

OracleFOREIGNKEYでUNIQUE制約を参照することは完全に可能です。

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>

しかし、それは悪い習慣です。一意キーと一緒に主キーを使用する主な理由は、外部キーで使用するための合成キーを提供することです。私はあなただったのですが、あなたの先生があなたに悪い習慣に満ちた課題を与えているのではないかと心配しています。

于 2009-08-24T03:37:18.160 に答える
2

これは、必然的に DBMS に依存します。私がよく知っている DBMS では、一意の制約と外部キーの制約は別々の考慮事項であり、両方を持つことができ、組み合わせると両方とも正常に動作します。

于 2009-08-24T01:35:33.833 に答える