我在ASP.NET MVC中创建一个网页,比较不同商店的价格。
我有一对多的产品和商店,SHOP
有一个PRODUCT
而PRODUCT
有很多SHOP
,问题是该产品是相同的但价格不同。
示例:
3 shops sells one fork.
Shop 1: $10
Shop 2: $20
Shop 3: $30
是为每个商店制作新产品的最佳方式,还是我可以改变价格?
答案 0 :(得分:1)
理想情况下,您想要的是Shop
和Product
个实体之间的多对多关系:
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
个,Product
个Shop
可以存在于多个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
,即product
和shop
中的一个。< / p>