1

多くの場所で使用できるアイテム、記事の情報を含むテーブルがあります。たとえば、商品を倉庫や店舗に置くことができます。だから私は店の情報を持つテーブルと倉庫の情報を持つテーブルを持っています。

品物とあることができる場所をどのように関連付けるのが最善の方法ですか?

オプションとして、テーブル項目に 2 つの外部キー (1 つは店舗用、もう 1 つは倉庫用) を含めることだと思います。店舗に FK がある場合、倉庫の FK は null でなければなりません。将来、アイテムが他の場所にある可能性がある場合は、items テーブルに新しいフィールドを追加できます。

しかし、情報を表示したい場合は、どの FK が null でないかを確認し、具体的な場所の情報を表示する必要があります。しかし、ビューを使用してアイテムの情報と場所の主な情報を表示すると、多くのフィールドが null になります。これは、アイテムが存在する場所ではないためです。

しかし、これが最善の方法ですか?他のオプションがありますか、それともこれが最も正しい方法ですか?

ありがとう。

4

2 に答える 2

1

オプションとして、テーブル項目に 2 つの外部キー (1 つは店舗用、もう 1 つは倉庫用) を含めることだと思います。

これは、リンクできる場所が数種類しかない場合に問題なく機能する正当なソリューションです。しかし、多くの種類の場所がある (または将来ある可能性がある) 場合は、次のようにすることを検討してください。

ここに画像の説明を入力

シンボルここに画像の説明を入力は継承 (別名、カテゴリ、サブタイプ、サブクラス、汎化階層など) を表します。詳細については、 ERwin メソッド ガイドで「サブタイプの関係」を検索してください。また、物理データベースで可能な実装戦略の詳細については、この投稿を参照してください

この投稿この投稿も参照してください。

しかし、アイテムの情報と場所の主な情報を表示するためにビューを使用すると、アイテムがある場所ではないため、多くのフィールドが null になります。

それを助けるものは何もありません。2 つのデータの構造が異なる場合、やみくもに「強制」して均一な行にすることができます。いくつかのフィールドをオプションのままにする (既に行っているように) か、共通のフィールドのみを取得する (それが可能な場合) か、場所の種類ごとに個別のクエリ/ビューを使用するだけです。取得する必要があるというルールはありません。すべてを単一のデータベース往復で1 !


1実際には、クライアント ライブラリによっては、論理的に独立した複数のクエリを 1 回のデータベース ラウンドトリップにまとめることができる場合があります。

于 2013-04-08T20:44:30.793 に答える
1

ロケーションテーブルが必要なようで、外部キーを介してそのテーブルへの参照をアイテムに含めます。

Item
-----------
ItemId (PK)
ItemName
LocationId (FK)

Location
-----------
LocationId (PK)
LocationName
于 2013-04-08T20:45:56.617 に答える