0

多対多の関係における「余分な」テーブルの必要性を理解しようとしています。

たとえば、私の ERD が:の場合Product m----- <makes> ----n Factory、テーブルの次のコードは次のようになります。

   CREATE TABLE factory(

        factory_id      INTEGER         NOT NULL,
        address         VARCHAR(30)     NOT NULL,
CONSTRAINT PK_factory_factory_id PRIMARY KEY(factory_id)
);


 CREATE TABLE product(

        prod_id         INTEGER         NOT NULL,
        prod_name       VARCHAR(30)     NOT NULL,
        price           FLOAT           NOT NULL,
CONSTRAINT PK_product_prod_id PRIMARY KEY(prod_id)
);


CREATE TABLE makes(

        prod_id         INTEGER         NOT NULL,
        factory_id      INTEGER         NOT NULL,
CONSTRAINT PK_makes_prod_id_factory_id PRIMARY KEY(prod_id, factory_id),
CONSTRAINT FK_product_prod_id FOREIGN KEY(prod_id) REFERENCES product(prod_id),
CONSTRAINT FK_factory_factory_id FOREIGN KEY(factory_id) REFERENCES factory(factory_id)
);

make テーブルの目的は何ですか? いつそれを使うのか、なぜそれが必要なのか、私には思いつきません。

4

3 に答える 3

1

has-and-belongs-to-man 関係は、両側が互いの倍数に属することができることを意味します。

この場合:

  • 複数の工場が一つの製品を作ることができます
  • 1つの工場で複数の製品を製造できます

これを表す唯一の方法は、「結合」テーブルを使用することです。工場テーブルと製品テーブルの各項目は 1 つの異なる製品または工場のみを表すため、そのようなテーブルがなければ他の複数の項目にリンクする方法はありません。

于 2013-02-19T15:29:54.987 に答える
1

単一の製品が N 工場のそれぞれでそれなしで製造できるという事実をどのように記録しますか?

  • product テーブルに 1 つの工場番号を格納することはできません。多くの可能な値があります。
  • factory テーブルに単一の製品番号を格納することはできません。多くの可能な値があります。

したがって、情報を正確に格納するには、3 番目のテーブルが必要です。

1 つの製品を製造できる複数の工場を表示するクエリを作成する方法の例を教えてください。

SELECT f.*
  FROM Factory AS f
  JOIN Makes   AS m ON m.factory_id = f.factory_id
 WHERE f.prod_id = 123456;

または:

SELECT f.*
  FROM Factory AS f
  JOIN Makes   AS m ON m.factory_id = f.factory_id
  JOIN Product AS p ON m.prod_id    = p.prod_id
 WHERE p.prod_name = "HyperCubic Widget"

どちらを使用するかは、製品 ID を知っているかどうか、または製品名やその他の属性を調べる必要があるかどうかによって異なります。

工場がどの製品を製造できるかを知る必要がある場合、クエリはほぼ対称です。

SELECT p.*
  FROM Product AS p
  JOIN Makes   AS m ON m.prod_id = f.prod_id
 WHERE f.factory_id = 321;

または:

SELECT p.*
  FROM Product AS p
  JOIN Makes   AS m ON m.prod_id    = p.prod_id
  JOIN Product AS p ON m.factory_id = f.factory_id
 WHERE f.address = "123 North St, Bigtown"

テーブルに参照整合性制約があるため、一般的に効率的な外部結合ではなく内部結合を使用できることに注意してください。

于 2013-02-19T15:28:27.710 に答える
0

これであなたが答えるであろういくつかの質問があります:

What products does a single factory make?

What factories make a particular product?

What factories make the same product as factory F?

What factories can be used to fulfill an order that that has products P1, P2, and P3?

Where is the closest factory to the customer who wants production P?

Where is the next closest factory?

等々。

于 2013-02-19T15:41:41.323 に答える