当前位置:  开发笔记 > 数据库 > 正文

第一范式和时间数据

如何解决《第一范式和时间数据》经验,为你挑选了1个好方法。

第一个正常形式表明行排序无关紧要.这是否意味着日期作为密钥的一部分的表不是1NF?例如,考虑一个股票价格表,其中日期/时间是PK的一部分.在这种情况下,您可以通过按日期排序数据并选择前1行来获得最后价格.这是否意味着要实现1NF,您需要将表拆分为:1)TickerCurrentPrice(每个股票代码1行)2)TickerHistoricalPrice谢谢



1> Quassnoi..:

1NF表示关系的表的一个方面,而不是表的表示.

如果你的关系说ticket HAS price,这是一个1NF违规行为,因为你不能,如果确定ticket HASHAS NOTprice通过查看上一条记录.您需要获取此故障单上的所有价格并选择最后一个,这违反了该故障non-ordering rule1NF.

如果你的关系说ticket HAD BEGUN TO COST price ON date,那么它在1NF所有的权利,因为每个记录说,它说:这个 ticket费用 price这个 date.

因此,我们说这个表不遵守1NF表示第一关系,但是当它符合代表第二个.

当然,桌子本身保持不变.

虽然您需要拆分表,但这并不意味着什么.

重点relational databases是您可以使用relational operators将一个关系转换为另一个关系.

什么是relation中的条款RDBMS?这是一张表格,显示了他们之间这种关系中所有可能值的所有组合.

举例来说,如果我们需要构建从自然数相等关系15,我们有这个表:

1 1
2 2
3 3
4 4
5 5

出现在此表中的所有对都是相等的关系; 所有没有出现的对都不是.我们(2, 3)在这里看不到,或者(4, 5),因为他们不平等.

但是您不需要将整个对保留在数据库中.您保留单个值并编写查询:

SELECT n1.number, n2.number
FROM number n1, number n2
WHERE n1.number = n2.number

,它给你相同的结果.

实际上,普通表单允许您在数据库中保留最简单的关系表,并使用SQL查询从它们构建更复杂的关系.

在您的情况下,如果您以下列方式编写查询(或定义视图):

SELECT ticket, price
FROM mytable
WHERE (ticket, date) IN (
  SELECT ticket, MAX(date)
  FROM mytable
  GROUP BY
    ticket
  )

,你ticket HAS price从(ticket HAD BEGUN TO COST price ON date)获得relation(),就像你将整个表保存在数据库中一样.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有