state(st_id,st_name)
分区(d_id,d_name,st_id [FK])
产品(pid,pnme)
价格(max_price,min_price,pid [FK],d_id [FK])
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
答案 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)您可以拥有未来价格表,当前价格表和历史价格表。这允许您提前输入价格变化,保持当前价格表的简短,并允许您在需要时不经常获得历史价格。您的应用程序代码维护这些价格表之间的关系。
我不确定您的其他价格表中的城市来自哪里,因为您定义了州和地区。