9

主キーなしで、外部キーのペアが常に異なる2つの外部キーを使用してテーブルを作成する可能性はありますか?たとえば、およびSTOCKテーブルからの外部キーとしてのテーブル。したがって、同じアイテムが異なる倉庫にある可能性があります。テーブルのビュー:item_idwarehouse_idITEMSWAREHOUSES

item_id   warehouse_id   quantity
10        200            1000
10        201            3000
10        202            10000
11        200            7000
11        202            2000
12        203            5000

または、自動インクリメントなどで未使用の主キーフィールドを作成する必要がありますか?データベースはオラクルです。

ありがとう!

4

8 に答える 8

28

複合主キーが必要です。

于 2008-10-16T13:57:15.747 に答える
6

このような:

create table stock
( item_id      references items(item_id)
, warehouse_id references warehouses(warehouse_id)
, quantity     number(12,2) not null
, constraint stock_pk primary key (item_id, warehouse_id)
);
于 2008-10-16T14:09:37.517 に答える
4

2 つの列に主キーを作成できます。デザイナー ビューで両方の列をクリックし、pk をクリックします。

または、2 つの列に一意の制約を追加できます。

ALTER TABLE [dbo].[RepresentativeData] 
add CONSTRAINT [UK_Representative_repRecID_AppID] unique (repRecID,AppId)
go

値が他のテーブルに存在することを強制するため、私は複合主キーを好みます。

于 2008-10-16T14:00:19.393 に答える
3

はい、複合主キーと呼ばれます

于 2008-10-16T13:58:09.473 に答える
1

このための複合主キーには何も問題はありませんが、とにかく単一の主キー列を作成する方がほとんどの状況でおそらく簡単です。特定のハードウェアの制約がない限り、pkcolはおそらくパフォーマンスとメンテナンスのしやすさを向上させるだけです。

モデルにうまく適合しない状況が発生する可能性があることを考慮することを忘れないでください。たとえば、存在することはわかっているが、現在どの倉庫にあるか、輸送中か、まだ割り当てられていないかなど、在庫がない場合があります。これを複合主キーに合わせるためのビジネスルールを作成するか、代わりに主キー列を使用する必要があります。

于 2008-10-16T14:25:13.490 に答える
0

誰もが言っているように、2つの列からプライマリを作成できます。人工的な自動増分列を作成する必要はありません。

また、外部キーは主キーとは異なる目的を果たすことに注意してください。したがって、主キーを2つの外部キーに置き換えることはできません。

于 2008-10-16T14:04:03.440 に答える
0

主キーを必要とするようなクエリを実行していない場合は、主キーは必要ありません。ただし、レコードを明確に削除するのは少し難しくなります。Oracle で許可されている場合は、item_id、warehouse_id に一意の制約を設定することをお勧めします。

于 2008-10-16T13:58:19.333 に答える
0

「未使用」の主キー フィールドを作成する必要はありませんが、多くの場合、作業が簡単になります。(Paul T が指摘しているように、行を削除するには両方のフィールドを指定する必要があります)。

私はよくこのような列に「PK」という名前を付けて、その限定された有用性を明確にしています。

于 2008-10-16T14:02:32.447 に答える