gpt4 book ai didi

database - 第一范式和时间数据

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:26 26 4
gpt4 key购买 nike

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

最佳答案

1NF 是表示关系 的表的方面,而不是表本身。

如果您的关系说 ticket HAS price,这是 1NF 违规,因为您无法确定 ticket HASHAS NOT price 通过查看单个记录。您需要获取这张票的所有价格并选择最后一个,这违反了 1NF非排序规则

如果您的关系说 ticket HAD BEGUN TO COST price ON date,那么它在 1NF 中没问题,因为每条记录都说明了它的内容:this 门票this datethis price

因此,我们说该表在表示第一个关系时不符合1NF,但在表示第二个关系时符合一个。

当然,表格本身保持不变。

这并不一定意味着您需要拆分表格。

关系数据库的全部意义在于您可以使用关系运算符将一种关系转换为另一种关系。

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 查询从中构建更复杂的关系。

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

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

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

关于database - 第一范式和时间数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/553856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com