1NF
是代表一个表的一个方面relation,而不是表本身。
如果你的亲戚说ticket HAS price
,这是一个1NF
违规,因为您无法确定是否ticket
HAS
or HAS NOT
the price
通过查看单个记录。您需要获取此门票上的所有价格并选择最后一个,这违反了non-ordering rule
of the 1NF
.
如果你的亲戚说ticket HAD BEGUN TO COST price ON date
,那么它就在1NF
好吧,因为每条记录都说了它所说的:this ticket
costs this price
from this date
.
因此,我们说这个表不符合1NF
when 代表第一个关系,但确实符合代表第二个。
当然,桌子本身保持不变。
但这并不一定意味着您需要拆分表格。
整个要点relational databases
是你可以使用relational operators
将一种关系转换为另一种关系。
什么是relation
就RDBMS
?这是一张表格显示all的组合all它们之间的这种关系中的可能值。
例如,如果我们需要在自然数上构造相等关系1
to 5
,我们有这张表:
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
) from (ticket HAD BEGUN TO COST price ON date
)就像将整个表保存在数据库中一样。