1

ProductProductType、 と呼ばれる 3 つのエンティティがありProductCategoryます。

、、の 3ProductType種類があるとしましょう。BookMusicVideo

ProductCategory、、、の3 つの異なるものがありBookます。FictionNovelTechnical

、、、ProductCategoryの3MusicRockの異なるJazzPop

そして、3 つProductCategoryの異なる for Video: Fiction, Comic, がありDramaます。

AProductには aProductTypeがあり、多くProductCategoryの 's を持つことができます。しかし、そのProductCategoryは と一致する必要がありProductTypeます。たとえば、 が の場合、ProductType、、およびasBookのみを使用できます。FictionNovelTechnicalProductCategory

アプリケーションコードやトリガーなどを使用せずに、この制限でこのスキーマをモデル化することは可能ですか (つまり、ProductCategoryaProductはその と一致する必要がありProductTypeます)。テーブル、外部キーなどを使用するだけです。

これをどのようにモデル化しますか?

4

2 に答える 2

3

製品タイプ

  • PRODUCT_TYPE_ID (パック)
  • PRODUCT_TYPE_DESCRIPTION

製品カテゴリ

  • PRODUCT_CATEGORY_ID (パック)
  • PRODUCT_TYPE_ID (fk からPRODUCT_TYPE.PRODUCT_TYPE_ID)
  • PRODUCT_CATEGORY_DESCRIPTION

製品

  • PRODUCT_ID (パック)
  • PRODUCT_TYPE_ID (fk からPRODUCT_TYPE.PRODUCT_TYPE_ID)

PRODUCT_CATEGORY_MAP

  • PRODUCT_ID (pk, fk to PRODUCT.PRODUCT_ID)
  • PRODUCT_CATEGORY_ID (pk, fk to PRODUCT_CATEGORY.PRODUCT_CATEGORY_ID)
  • PRODUCT_TYPE_ID (pk、fk から と のPRODUCT.PRODUCT_TYPE_ID 両方 PRODUCT_CATEGORY.PRODUCT_TYPE_ID)
于 2010-10-30T01:17:03.107 に答える
2

それは簡単です。単純な 2 レベルの分類の問題です。アプリでは、2 つの別個のドロップダウンが必要です。ProductType が選択された後に ProductCategory が入力されます。

1つの明確化: 「製品にはProductTypeがあり、多くのProductCategoryを持つことができます」というあなたの声明は、あなたの説明と矛盾しています。Product は、ProductType(Book、Music) に基づく Product Category (Fiction、Jazz) を 1 つだけ持つことができます。

ここでは代理キーは必要ありません (他のモデリング要件にある場合があります)。ここでは単に冗長です。このような単純な分類では、CHAR(1) または (2) の方がはるかに優れており、ユーザーと開発者にとって使いやすく (出力をスキャンしていると、「B」が「Book」などを意味することがわかります)、数値よりも高速です。キー(もちろんtinyintを除く)。

ここには「トリック」はありません。特定したルールをサポートするのは、まっすぐな正規化です。

製品分類へのリンク

「マップ」テーブルの必要性がわかりません。

Product の代理キーを提供しましたが、当然ながら、合理的な制約を実装するには、他のキーが必要です。

コメントへの対応

わかりました。あなたの要件は明確ではなく、現在変更されているようです。コメントで私の特定の質問に答えると、要件をサポートするために必要なモデルが簡単になります。支援するために、2 つの可能性を公開しました。もちろん、それは不完全であり、あなたの答えが保留されています:

2 つの可能なモデルへのリンク

管理者とユーザーのコントロールの「厳しさ」は非常に緩いようです。次のいずれかを選択して、質問を進めて終了できるようにしてください。

  1. Product.ProductType は管理者によって設定されます。これにより、管理者とユーザーは、Product.ProductType に有効な ProductCategories のいずれかを選択して、どのような用途にも使用できるようになります。

  2. 製品ごとに、管理者は ProductTypeProductCategories のサブセットを (Product.ProductType に有効な ProductCategories のリストから) 選択します。その後、ユーザーは、製品の管理者が選択した ProductCategories のみを使用できます。

ご返信いただければ、最終版を発行します。

于 2010-10-30T04:40:14.697 に答える