第一范式数据库规范化

时间:2014-07-29 22:27:08

标签: mysql database database-design database-normalization

我是数据库规范化的新手,我想知道我是否正在对我创建的表的结构做正确的事。 我有一个名为“RoomRates”的表格,其中包含以下列:

 RoomRateId(int), RoomType(int), Season(int), Monday(decimal),Tuesday(decimal), Wednesday(decimal), Thursday(decimal),Friday(decimal), Saturday(decimal), Sunday(decimal)

据我所知,该表的结构打破了First Normal Form。

我在RoomType和Season上有一个外键。

我应该把桌子的结构变成:

RoomRateId(int), RoomType(int), Season(int), DayOfTheWeek(int), Rate(decimal) 

为了不破坏第一范式?

2 个答案:

答案 0 :(得分:1)

我会尽快给你一些提示。我建议不要一步一步地完成正常的表格,因为除非你在练习,否则你会重新完成以前的工作(和你的团队的工作)。

作为设计数据库的一般规则,每个字段必须在整个数据库中存在一次。您还必须将语义数据分组到表中,并使用外键将它们链接。

参考你的问题,我可以完全翻新表格。您可能不需要每周的每一天都有一个列。您是否认为如果不使用多个列,则只能使用一个?外国人将尽可能轻(推荐一栏,除非没有任何其他方式来解决链接)。在查询和存储方面,请始终考虑您的设计是否对大量数据有用。

我建议你看一下这个链接:A beginner's guide to SQL database design

希望这有帮助。

答案 1 :(得分:0)

对我来说,你的桌子没有打破1标准化表格。 第一种形式1NF具有以下特征:没有排序,也没有从左到右用于行不是从上到下的列。每个交叉点只有一个特定域的值而没有别的。但最重要的特征是,我认为第一种形式的关系只是该关系中的所有属性都应该只有原子价值。具有非原子值的属性应该被分解以达到1NF。

我认为你的表列只有原子值。

此外,星期几列的想法比几列好,这导致了更多的存储空间和更多的处理时间。