多对多的关系与否?

时间:2010-10-11 18:09:31

标签: database-design

我在尝试定义3个表之间的关系类型时遇到了一些麻烦。 它们是产品,供应商,第三,QUANTITY,我有产品和供应商的组合,以及存储该组合产品数量的字段。

我可以从一个或多个供应商处获得一个产品,这就是表QUANTITY存在的原因。例如:我可以从供应商X和供应商Y购买相同的笔记本A.

表QUANTITY的字段为prod_id,supp_id和qty。产品和供应商都有ID字段。我无法弄清楚,所以我要求一些比我更聪明的家伙的帮助,这意味着你们所有人。 :d

非常感谢。

[编辑]

我很抱歉,我应该从一开始就更清楚了。这是关于建模。 :d

3 个答案:

答案 0 :(得分:1)

您发布的帖子中描述的情况似乎可以回答您提出的任何问题。也就是说,您在问题中说明了问题的正确解决方案。

表产品将具有字段ID(我更喜欢称之为prop_id,但这只是我)。供应商将拥有id(或者,在我的世界中,supp_id)。表QUANTITY将具有(prop_id,supp_id和quantity)。

理想情况下,产品中的prop_id将作为主键或唯一索引受到保护。与供应商中的supp_id相同。在QUANTITY中,您将在prop_id和supp_id的组合上创建主键或唯一索引(因为每个组合只应出现一次,即使单独考虑的每个列可能都有重复项。)

最后,我通常更喜欢在每个表上都有一个单列整数主键,所以(如果是我,其他人不同意)我会使(prop_id,supp_id)成为唯一索引并创建一个新的主键列quantity_id在QUANTITY表中。

答案 1 :(得分:1)

既然你问起关系,这里有一些可能有用的信息。设计级别(概念)中存在多对多表,但是通过构建两个一对多关系来构建数据库。

虽然您没有必要,但您可能应该声明quantity.supp_id是供应商的外键,建立从供应商到数量的一对多关系;并声明products.prod_id是产品的外键,建立从产品到数量的一对多关系。这样做可能有助于db优化查询。它还允许您设置级联删除,以便从供应商表中删除供应商也将自动删除数量表中所有供应商的记录(如果您希望这样做)。

答案 2 :(得分:0)

您似乎对具有其他属性的实体之间的关系感到困惑。 我同意它是相当不常见的,但它没有任何无效,你似乎正在建模它。