第一范式数据库规范化
Posted
技术标签:
【中文标题】第一范式数据库规范化【英文标题】:First Normal Form Database Normalization 【发布时间】:2014-09-21 10:58:45 【问题描述】:我是数据库规范化方面的新手,我想知道我在创建的表结构方面是否做对了。 我有一个名为“RoomRates”的表格,其中包含下一列:
RoomRateId(int), RoomType(int), Season(int), Monday(decimal),Tuesday(decimal), Wednesday(decimal), Thursday(decimal),Friday(decimal), Saturday(decimal), Sunday(decimal)
据我所知,这个表格的结构打破了第一范式。
我有一个关于 RoomType 和 Season 的外键。
我应该把表格的结构变成:
RoomRateId(int), RoomType(int), Season(int), DayOfTheWeek(int), Rate(decimal)
为了不破坏第一范式?
【问题讨论】:
A beginner's guide to SQL database design的可能重复 【参考方案1】:很快,我将为您提供一些提示。我建议不要按部就班地走常规形式,因为除非你在练习,否则你会重新制作你以前的工作(和你团队的工作)。
作为设计数据库的一般规则,每个字段在整个数据库中必须存在一次。您还必须将语义数据分组到表中,并用外键链接它们。
参考您的问题,我可以对表格进行全面改造。您可能不需要为一周中的每一天创建一个列。你有没有想过如果你可以只使用一个而不是几列?外文尽量轻(推荐一栏,除非不存在任何其他方式解决链接)。在查询和存储方面,始终考虑您的设计是否对大量数据有用。
我建议你看看这个链接:A beginner's guide to SQL database design
希望这会有所帮助。
【讨论】:
【参考方案2】:对我来说,您的表格并没有打破 1 规范化表格。 第一种形式 1NF 具有以下特征:没有排序,既不是从左到右的列,也不是从上到下的行。每个交集只有一个特定域的值,没有别的。但最重要的特征,我认为第一种形式的关系只是该关系中的所有属性都应该只有原子值。具有非原子值的属性应被分解以达到 1NF。
我认为您的表列将只有原子值。
此外,一周中某一天的列比多列更好,这会带来更多的存储空间和更多的处理时间。
【讨论】:
以上是关于第一范式数据库规范化的主要内容,如果未能解决你的问题,请参考以下文章