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)
);

制作表的目的是什么?我想不出您何时可以使用它或为什么需要它。

4

3 回答 3

1

如果没有 N 个工厂,每个工厂都可以生产一个产品,你如何记录这一事实?

  • 您不能在产品表中存储单个工厂编号;有很多可能的值。
  • 您不能在工厂表中存储单个产品编号;有很多可能的值。

因此,您需要第三张表来准确存储信息。

您能否提供一个示例,说明您将如何创建查询以查看可以生产单一产品的多个工厂?

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 回答
1

拥有并属于多的关系意味着双方可以属于彼此的倍数。

在这种情况下:

  • 多个工厂可以生产一个产品
  • 一家工厂可以生产多种产品

表示这一点的唯一方法是有一个“连接”表,因为工厂表和产品表中的每个项目只代表一个不同的产品或工厂,如果没有这样的表,就无法将其链接到多个其他项目。

于 2013-02-19T15:29:54.987 回答
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 回答