在多个表中存储相等的记录

时间:2009-09-17 14:30:59

标签: database ms-access

我正在开发一个简单的访问应用程序,帮助我们为项目订购合适的产品。我为每个包含其产品的承包商提供了一张桌子。我有一个与产品相关的“最喜欢的产品”表,并提供了如何以及何时使用产品的其他信息。

通常id有一个包含承包商列的大表(包含所有产品)。我最喜欢的产品表,我可以很容易地与产品相关。但在这里我需要将产品保存在单独的表中。那么最好的方法是将我最喜欢的产品表与承包商表中的产品联系起来吗?

谢谢:)

3 个答案:

答案 0 :(得分:1)

我会创建一个承包商表,一个产品表,然后是产品的多对多链接表承包商。此外,我还会创建一个最喜欢的产品表,在这个表中,您还可以拥有多对多的承包商产品链接,以用于产品可能来自多个承包商的情况

答案 1 :(得分:1)

这不是最好的设计。

您应该UNION所有承包商表格和JOIN结果:

SELECT  *
FROM    (
        SELECT  product
        FROM    contractor1
        UNION ALL
        SELECT  product 
        FROM    contractor2
        UNION ALL
        …
        ) c
JOIN    favorite f
ON      f.product = c.product

您最好为contractor作为字段的产品保留一个表格。

查询和管理会更容易。

答案 2 :(得分:0)

因此,您将拥有Contractor,Product和Contractor_Product表。像(在psuedo-sql中)的东西:

create table Contractor {
  id int primary key,
  name varchar(50) not null,
  ...
}

create table Product {
  id int primary key,
  name varchar(50) not null,
  ...
}

create table Contractor_Product {
  contractorid int references Contractor(id),
  productid int references Product(id),
  ...,
  primary key contractorid, productid
}

现在,我不是100%肯定你想从“收藏夹”表中得到什么。它可能不是表,而是查询。或者,您可能想要一张类似于Contractor_Product表的表格?或者只是Contractor_Product表上的另一个“isfavorite bool default = false”列?

希望有所帮助!