如何修复以下多对多关系?

时间:2015-12-22 15:45:42

标签: sql oracle

我必须按如下方式构建数据库:

我们有一个名为Organization的表。组织可以销售一种或多种产品。然后,我有一个名为Products的表,其中列出了产品名称,成本和销售量。

如何创建一个关系,其中organization.product可以包含对products表中多行的引用?

我想我可能需要创建另一个表吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

假设您的组织和产品表格中包含类似的内容。

Organization
    Id (Primary Key)
    Name
    ....

Product
    Id (Primary Key)
    Name
    Cost
    ....

然后,您将创建一个这样的连接表,将您的组织链接到产品。

OrganizationProduct 
    Id (Primary Key)
    OrganizationId (Foreign Key to Organization Table)
    ProductId (Foreign Key to Product Table)

答案 1 :(得分:1)

您要在此处执行的操作是有一个表格代表您的产品,在该表格中,其中一个字段应代表具有该产品的组织,称为org_id。

然后在您的组织表中,您将有一个id列与产品表中的org_id连接。

例如:

 Products:
 id     int
 org_id int
 name   varchar
 colour varchar
 .....
 any other information about products


 Organisations:
 id    int
 name  varchar
 type varchar
 ...
 other organisation details

现在,当您要为每个公司列出所有产品时:

    SELECT products.name, organisations.name 
    FROM products 
    JOIN organisations 
    ON products.org_id = organisations.id;

新信息,产品可属于多个组织。现在你需要一个名为organisationProducts的表来充当两个表之间的中介并创建多对多的关系:

   Products:
   id int
   name varchar

   Organisations:
   id int
   name varchar

   OrgnisationProducts:
   id int
   Org_id
   Prod_id

您将prod_id加入到products.id和org_id加入organisations.id

答案 2 :(得分:0)

您想要的是一个关联表。我们称它为OrgProduct(我用单数命名所有表格;有些商店将它们命名为复数,但要保持一致)。

OrgProduct至少将组织密钥和产品密钥作为列,两个密钥的组合将成为OrgProduct的关键。

如果存在关系的属性,例如组织销售产品的权利到期的日期,则这些属性也将成为此表中非关键列的候选对象。