三元関係:単一のテーブルを持つことと複数のテーブルを持つことの違いは何ですか?


8

次の3項関係を考えます。 三者関係

すべてのエンティティに2つの属性(PKと名前)しかないと仮定します。


ここに私が導き出した表があります(5つの表):

Sector
-------------------------
ID_Sector    SectorName
-------------------------

Product
-------------------------
ID_Product    ProductName
-------------------------

Company
--------------------------------------
ID_Company    ID_Sector    CompanyName
--------------------------------------

Relationship 1 (R1)
-------------------------
ID_Sector    ID_Product
-------------------------

Relationship 2 (R2)
-------------------------
ID_Company    ID_Product
-------------------------

質問:

その三者関係の良い解決策ですか?次の単一のテーブルの代わりに2つのテーブル(R1とR2)を持つことの違いは何ですか?

Ternary table
-------------------------------------
ID_Sector    ID_Company    ID_Product    
-------------------------------------

私には、各リレーションシップ(R1とR2)に2つの別々のテーブルがある方が、1つのテーブルを持つよりも良い解決策のように見えますが、それが実際に当てはまるのか、それが良い方法なのかはわかりません。

回答:


6

2つのソリューションは異なるルールをモデル化します。三元表では、企業が特定のセクターで特定の製品しか持っていない可能性があると言っています。もちろん、2つのセットは重複する場合がありますが、異なるセクターでは異なる製品のセットがあります。

バイナリテーブルを使用すると、そのセクターは、会社が関連する製品に影響を与えないと述べています。同様に、会社はどの製品がどのセクターにあるかに影響を与えません。

これらの選択肢の選択は、ビジネスルールによって決まります。抽象的で学術的な議論では答えられません。エンティティ間の関係に名前を付けるのが最適です。言っていることを同社は、製品に関連して、たとえば、興味深いです。なぜ会社が製品に関連しているのかを述べればなおさらです。「会社が製品を購入する」は、「会社が製品を製造する」または「会社が製品を使用するためのセキュリティクリアランスを持っていない」とは異なる情報です。これを行うことで、新しい関係、属性、エンティティタイプを発見することがよくあります。バイナリテーブルと3値テーブルの両方が必要になる場合があります。

編集:ルールについて

  1. 1つの会社が多くの製品を生産している/各製品が正確に1つの会社によって生産されている
  2. 1つの企業が1つのセクターで報告した/各セクターが多くの企業で報告した
  3. 製品は1つのセクターで販売されます。各セクターには多数の製品が用意されています。

これらのエンティティタイプがあります

セクター-SectorID

会社-CompanyID、SectorID

製品-ProductID、CompanyID

ルールのいずれかが多対多の場合は、バイナリアソシエーションテーブルが必要になります。

余談ですが、関係の名前は、「持っている」、「に属している」、「ある」のように、多くの場合、それらが照らすよりも多くを隠しています。これらを使用しているBAを見つけた場合は、別のことを考えてもらいます。


ビジネスルールは次のとおりです。1)企業製品を生産している。2)企業はセクターに属します(セクターの例:機械、食品、ソフトウェア)。3)製品はセクターに属します。私は簡潔にしようとし、重要な情報を隠す代償を払った。ありがとうございました!
feelthhis

私のコメントは別の質問を提起します:ERDの上のモデルはどのビジネスルールですか?ERDをビジネスルールに関して非常に正確にする方法はありますか?三元表は上記のERDを正確に表していますか?もしそうなら、上記のERDは述べられた3つのビジネスルールに関して間違ったモデルですよね?
feelthhis

上記のERDモデルを実行するビジネスルールは次のとおりです。3値テーブルは、必要かつ十分なキーとしてProductID、SectorID、およびCustomerIDを持つものがあることを意味します。「すべての航空エンジン(セクター)のGE(会社)は(製品)の90%(属性)に資金を提供しますが、「ゴールドマンは航空エンジンの5%に資金を提供します」、「GEは風車の3%に資金を提供します」のようなものです。
Michael Green 14

@feelthhis-「ビジネスルールに関してERDを非常に正確にする方法はありますか」:はい!それがERDの役割です。回答を編集します。「3成分表は上のERDを正確に表していますか」:「上のルール」を意味すると思います。いいえ。製品は1つの会社で製造されています。会社は1つのセクターに属しています。ProductIDを知っていると、顧客とセクターを一意に識別でき、これらのIDは3値テーブルでは冗長になります。したがって、3つのルールに従って正規化されていません。「もしそうなら・・・」:同意する。
マイケルグリーン

Ternary Table: a company may...表記(IDSector、IDCompany、IDProduct)を使用すると、タプル(1、1、1)および(1、1、2)が許可されることを意味します( "c1"は "s1"に "p1"および "p2"を生成します) ); そして、タプル(1、1、1)と(2、1、2 )は許可されていません( "c1"は "s1"に "p1"を生成し、 "s2"に "p2"を生成します)?どうして?三元テーブルは可能なタプル(IDSector、IDCompany、IDProduct)を許可するべきではありませんか?3値テーブルが任意のタプル(IDSector、IDCompany、IDProduct)を許可する場合、3値テーブルBinary Tables: sector has...; company has...はバイナリと同等であると考えました。
feelthhis 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.