Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 维护价格表每天都在变化_Mysql_Database_Database Design - Fatal编程技术网

Mysql 维护价格表每天都在变化

Mysql 维护价格表每天都在变化,mysql,database,database-design,Mysql,Database,Database Design,状态(st\U id,st\U名称) 地区(d_id、d_名称、st_id[FK]) 产品(pid、pnme) 价格(最高价格、最低价格、pid[FK]、d\U id[FK]) 1.)这是我的表格结构,我想显示5个州及其地区的产品价格,但在价格tbl中,我重复了每个地区的产品(超过10个) 我的价格tbl有什么问题,你能给我一个正常化的想法吗 2.)现在我正计划在价格tbl中添加日期戳(开始日期)字段,这样我就可以维护历史价目表,但如何在每个日期都不重复产品(如下图所示)的情况下做到这一点..

状态(st\U id,st\U名称)
地区(d_id、d_名称、st_id[FK])
产品(pid、pnme)
价格(最高价格、最低价格、pid[FK]、d\U id[FK])

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

我的价格tbl有什么问题,你能给我一个正常化的想法吗

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
1) 在您的价格(价格范围)表中,我不明白为什么(d_id,pid)会重复?除非在表中设置了“生效日期”列,否则应该只有一个价格范围

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

我不确定city在您的其他价格表中来自何处,因为您定义了州和地区。

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

2) 再说一次,桌子的设计没什么问题;如果有更改,您可能只考虑输入数据,以便检索给定日期的价格,以查找所需数据之前的最后记录。这减少了桌子的大小

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

此外,只要数据不是冗余的,大型表也没有问题。您的设计似乎没有冗余

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

如果您在所有这些地区提供所有产品,并且价格根据产品在哪个地区销售而有所不同,那么您在每个地区重复该产品才有意义

我的价格tbl有什么问题,你能给我一个正常化的想法吗

看起来您的价格表没有合理的主键

如果你是沿着这些线做桌子的

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表格。但是您的示例数据可能无法放入其中。

粘贴到SQL DDL中,以使您的结构和约束非常清晰。我认为它已规范化。N说的是桌子的宽度,而不是桌子的长度。我喜欢你的薄桌子。(而且,规范化是老生常谈,没有必要的。)在我的价格tbl中,不同地区的产品价格不同,所以我重复d_id(地区id)和pid(产品id)。。。我的表格中需要做哪些更改您的价格范围表格中d_id和pid的组合必须是唯一的。每个商品、每个地区都有一个价格范围。是的!命名约定。比什么都重要。@Rudie:从数据库中得到正确答案肯定比什么都重要。获得正确答案与约束有关。它与命名约定无关。@MikeSherrill在命名约定之后加上“Catcall”,这是最重要的。命名约定很容易满足,它们应该总是排在列表的首位。实现的容易程度并不决定重要性。