我知道对我来说最简单的事情就是根据我必须编写的查询来编写表.这将创建一个包含大量冗余数据的数据库,但我很好奇是否有一个快乐的媒体?
就像后记一样,我不想碰到我正在抱怨我的工作,但我真的很想知道更多关于这一点.我的工作环境不是最友好的,所以我不愿意和同事们提出这个问题.但是,我会感谢来自更有经验的人的任何想法,书籍,教程或意见.
谢谢.
解决方法
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?
它是.