维持价格表每天都在变化

时间:2013-03-15 15:58:16

标签: mysql database database-design

  

state(st_id,st_name)
  分区(d_id,d_name,st_id [FK])
  产品(pid,pnme)
  价格(max_price,min_price,pid [FK],d_id [FK])

enter image description here

1.)这是我的餐桌结构,我想显示5个州及其所在地区的产品价格,但在价格方面,我正在为每个地区重复产品(超过10个)。

我的价格问题出了什么问题,你能不能给它一个标准化的想法..

2.。)不,我只是计划将日期戳(开始日期)字段添加到价格tbl,以便我可以维护历史价格表,但是如何在不重复每个日期的产品(如下所示)的情况下进行..减少tbl行的更好的解决方案

_______________________________________
product| price |district|date(mm/dd/yy)| 
_______|_______|________|______________|
fan      200   delhi    3/15/2013
speaker  400   delhi    3/15/2013
fan      210   chenni   3/15/2013
speaker  403   chenni   3/15/2013
fan      200   delhi    3/16/2013
fan      210   chenni   3/16/2013

3 个答案:

答案 0 :(得分:1)

1)您的表格设计没有什么问题 - 但是,示例数据没有意义,因为产品1和区域111重复。您可能希望在pid和d_id上创建复合主键。

2)同样,桌面设计没有太大问题;如果有更改,您可以考虑仅输入数据,以便检索给定日期的价格搜索所需数据之前的最后一条记录。这减少了桌子的大小。

一般要点:请选择一个命名约定并坚持下去 - 你使用pid和d_id(一个带下划线,一个没有);一般来说,我更喜欢更具描述性的列名,但一致性是关键。

此外,只要数据不冗余,大型表就没有问题。你的设计似乎没有裁员。

答案 1 :(得分:1)

  

1.)这是我的表结构,我想在5中显示产品的价格   州和它的地区,但在价格tbl我重复产品(超过10)   对于每个地区。

如果您在所有这些地区提供所有产品,并且价格根据产品的销售地区而有所不同,那么您只能为每个地区重复产品。

  

我的价格问题出了什么问题,你能不能给它一个标准化的想法..

看起来就像您的价格表没有合理的主键一样。

如果您沿着这些方向构建了表格。 。

create table prices (
  district_id integer not null references districts (district_id),
  product_id integer not null references products (product_id),
  primary key (district_id, product_id),
  min_price numeric(14,2) not null,
  max_price numeric(14,2) not null
);

假设各地区的最低和最高产品价格不同,您将在5NF中找到一张桌子。但是你的样本数据可能不适合它。

答案 2 :(得分:0)

1)在您的价格(价格范围)表中,我不明白为什么(d_id,pid)会重复?除非您在表格中放置有效日期列,否则应该只有一个价格范围。

2)您可以拥有未来价格表,当前价格表和历史价格表。这允许您提前输入价格变化,保持当前价格表的简短,并允许您在需要时不经常获得历史价格。您的应用程序代码维护这些价格表之间的关系。

我不确定您的其他价格表中的城市来自哪里,因为您定义了州和地区。