如何安排SQL数据?

时间:2018-03-14 10:34:28

标签: sql database-design

我有一个SQL表名称MarketRates。在此表中有一列,名称为Rate。每个月费率都会发生变化。我已经解决了这个问题。我怀疑是否有任何其他更好的解决方案。我的表架构和数据如

enter image description here

我有很多记录。我的问题是同一个名字有多行。还有其他更好的解决方案吗?

3 个答案:

答案 0 :(得分:0)

我很难理解你的问题,但我认为你问的是数据库规范化。

  

数据库规范化或简单规范化是根据一系列所谓的正常形式重构关系数据库的过程,以减少数据冗余并提高数据完整性。

互联网上有很多关于如何规范化数据库的文章。规范化数据库的方式和时间取决于您和要求。

您可能需要将市场信息移至自己的表格中

答案 1 :(得分:0)

看起来您正在询问有关数据库何时增长的规范化建议。

一个例子是,如果你有数百万条记录,而且很多记录的速率为1,而其他很多记录的速率为2或更高,则需要快速更新。 在某些情况下运行以下查询可能需要一段时间才能运行:

update MarketRates set rate = @NewRate where rate = @OldRate

因此,为了提高效率,您宁愿拥有一个包含所有费率和主键的单独表格,而不是在MarketRates中使用您的费率,而是拥有匹配的外键。

然后,当您查询表时,您将加入该外键=主键关系的费率表。

现在,当您想要更新MarketRates中数百万条目的费率时,您只需更新费率表中的单个条目,MarketRates将查看该单个地点以获得更新的费率。

答案 2 :(得分:0)

在规范化方面,一个解决方案如下,其中MarketRates表包含Markets表和Rates表的外键:

table Markets (
    Id integer,
    Name varchar(128)
)

table Rates (
    Id integer,
    Rate numeric,
    Year integer,
    Month varchar(20)
)

table MarketRates (
    FK_MarketId integer,
    FK_RateId integer
)

拥有三个表(而不是两个表)的一个优点是,如果在一个以上的市场中使用给定的费率,您也可以避免在市场中重复利率。就个人而言,我会将月份存储为整数值,但这部分与此处不同。