具有不同数据的数据库对象

时间:2015-06-23 12:29:48

标签: sql asp.net asp.net-mvc database entity-framework-6

我在ASP.NET MVC中创建一个网页,比较不同商店的价格。

我有一对多的产品和商店,SHOP有一个PRODUCTPRODUCT有很多SHOP,问题是该产品是相同的但价格不同。

示例:

3 shops sells one fork.
Shop 1: $10
Shop 2: $20
Shop 3: $30

是为每个商店制作新产品的最佳方式,还是我可以改变价格?

3 个答案:

答案 0 :(得分:1)

理想情况下,您想要的是ShopProduct个实体之间的多对多关系:

public class Shop
{
    public int ShopId {get; set;}
    public virtual ICollection<ShopProduct> ShopProducts {get; set;}
}

public class Product
{
    public int ProductId {get; set;}
    public string Name {get; set;}
    public virtual ICollection<ShopProduct> ShopProducts {get; set;}
}

public class ShopProduct
{
    public int ProductId {get; set;}
    public int ShopId {get; set;}
    public virtual Product Product {get; set;}
    public virtual Shop Shop {get; set;}
    public decimal Price {get; set;}
}

通过上面的示例,每个Shop可以包含多个Product个,ProductShop可以存在于多个Shop中。在每个Product - ID | Shop Name -------------- 1 Shop 1 2 Shop 2 3 Shop 3 ID | Product Name ----------------- 1 Fork 组合的交汇处,您可以指定价格。让我举个例子:

ProductId | ShopId | Price
----------------------------------------------------
1           1        10.00  <- fork for Shop 1 @ $10
1           2        20.00  <- fork for Shop 2 @ $20
1           3        30.00  <- fork for Shop 3 @ $30

所以现在我们可以这样做(你的例子来自上面):

select distinct (sample(?name_) as ?name) where {
  ?name_ dcterms:subject category:Individual_graphs ;
        rdfs:label ?label
}
group by ?label
order by desc(?name)

您现在可以根据需要添加任意数量的商店和产品,并将它们链接到多对多表中。像这样的表在数据库用语中称为联结表

答案 1 :(得分:1)

我会为那个

创建3个表
Table Shop
 - ShopId (PK)
 - Name
 - ...

Table Product
 - ProductId (PK)
 - Name
 - ...

Table Price
 - ShopId (FK)
 - ProductId (FK)
 - Price
 - Date (optional if you want price history)

如果您需要价格历史记录,则字段ShopId, ProductId, Date必须形成唯一约束

答案 2 :(得分:0)

最好为字段设置单独的表格,例如Price,并在该新表中有两个foreign keys,即productshop中的一个。< / p>