1
8
编辑:我被告知在理论上没有违反任何正常形式。因为这是公认的答案,所以我把它放在这里作为参考,因为在实践中考虑3nF可能有助于避免类似问题中的情况。 你违反了 Third Normal Form (3NF) ,因为如果两个表中的数据基本相同,那么每个表的每个属性都不直接依赖于其各自表的键。 |
2
6
信不信由你,跨表复制列本身并没有违反任何理论上的正常形式。除了域/键标准形式(dknf),标准形式是以单个而不是多个表的形式定义的。dknf是根据约束定义的,一般情况下没有约束。因此,如果违反了正常形式:
考虑 normal forms ,使用维基百科文章中的简短定义:
标准化的目的包括防止异常。然而,规范化并不是完全的,因为它不能保证关系数据库完全没有异常。这是实践偏离理论的一个例子。 如果这仍然不能让您信服,请考虑模式KM的注释提示,其中 十一 表示t的历史(或版本)版本 十 .t的主键 十一 由与T相同的主键列组成 十 ,再加上额外的列(日期/版本列)。那t 十一 具有不同的候选键使得异常倾向和无异常、规范化设计之间的所有区别。 * 有人可能认为可以使用联接在两个表之间创建依赖关系。虽然一个联接可能会创建一个具有依赖关系的表,但是该依赖关系存在于该表上,而不是在联接的组成部分之间。在现有的情况下,这再次意味着其中一个表将是联接表,并且将遭受依赖关系本身的影响,而与数据库中的其他表无关。 |
3
4
也许避免冗余数据的规则?(即 相同的 两个表中的数据) |
4
4
如果11列中的10列相同,为什么不能仅是一个表,其中第11列为空(以及可能的第12列来表示它是哪种类型的数据,即它本来应该在哪个表中)? |
5
4
这要看桌子上有什么。 如果没有相互关联的记录(例如,如果一个表只是源于第一个表但从第一个表中删除的存档记录),则不会违反任何规则。 但如果每个表中的记录相同,则存在依赖性问题,第11列只依赖于记录中的键值,而不是附加列。假设所有十列都不涉及主键,那么就违反了第三个nf。 |
6
3
有两个相同或接近相同的关系本身并不违背任何通常的正常形式。outis已经很全面地解释了原因。很可能违反了 Principle of Orthogonal Design 然而,这是关系数据库设计理论的另一个方面。 |
7
0
如果所有10列都是键的一部分,那么第二种正常形式是:消除冗余数据。具体来说,这属于“无障碍与代理主键”的两难境地——老实说,我不记得这两个选择中的任何一个是“违反”2nf,但代理键肯定更接近2nf的精神。 |
8
0
只有主键在表之间可以是冗余的。在多个表中有任意数量的非主键列违反了第三种正常形式。 |
hashmap · 数据库规范化2NF和3NF 6 年前 |
user3127554 · SQL数据库关系 6 年前 |
Mikhail Mishin · 如何存储可以是数字范围或数值的数据? 8 年前 |
Prashant Singh · mysql数据库中高效的读写 11 年前 |
Tarzan · 除了NULL之外,处理未知日期时间值的好策略是什么? 11 年前 |