sql – 数据规范化和编写查询

前端之家收集整理的这篇文章主要介绍了sql – 数据规范化和编写查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是个小伙子.开发人员(工作5个月),我对数据规范化有疑问.现在,据我所知,数据规范化背后的一般原则是创建一个RDBMS,将​​数据冗余保持在最低限度.在我的项目中,其中一个DB人员创建了一个DB.我们有50个表,DB中的表通常非常分散,即.一个表有两三列,就是这样.现在,在编写SQL查询时,由于每个查询都涉及梳理几个不同的表并将它们连接在一起,因此它已成为一个小麻烦.我想知道这是否是数据规范化的副作用?或者这指向其他什么?

我知道对我来说最简单的事情就是根据我必须编写的查询来编写表.这将创建一个包含大量冗余数据的数据库,但我很好奇是否有一个快乐的媒体?

就像后记一样,我不想碰到我正在抱怨我的工作,但我真的很想知道更多关于这一点.我的工作环境不是最友好的,所以我不愿意和同事们提出这个问题.但是,我会感谢来自更有经验的人的任何想法,书籍,教程或意见.

谢谢.

解决方法

general principle behind data normalization is to create a RDBMS where data redundancy is kept to a minimum.

只有部分正确.

规范化不是关于“冗余”.

这是关于“更新异常”.

1NF是“不使用数组”规则.打破1NF意味着一行不是原子的,但集合中的集合和独立更新不会很好.会有锁定和缓慢.

2NF是“一键”规则.每行只有一个键,行中的所有内容都取决于键.密钥的一部分没有依赖关系.有些人喜欢谈论候选键,自然键和外键;它们可能存在,也可能不存在.当所有属性都依赖于一个键时,满足2NF.如果密钥是单列代理键,则通常会满足此正常形式.

如果违反了2NF,则您拥有的列依赖于密钥的一部分,而不是整个密钥.如果您有一个表(部件号,修订号)作为键,以及颜色和重量的属性,其中重量取决于整个键,但颜色仅取决于部件号.你有一个2NF的问题,你可以更新一些部分颜色而不是其他颜色,创建数据异常.

3NF是“唯一的关键”规则.如果将派生数据放在一行中,并更改派生结果,则它与源列不匹配.如果更改源列而不更新派生值,则也会出现问题.是的,触发器是一个糟糕的黑客攻击,允许3NF设计违规.这不是重点.关键在于定义3NF并显示它可以防止更新问题.

each query involves combing through several different tables and joining them together. I was wondering if this is a a side effect of data normalization?

它是.

猜你在找的MsSQL相关文章