我在做一个在线课程,它提供了以下relvar例子,然后说:
嗯。虽然答案和answercode在每个不同的元组制作 每个元组在技术上独一无二的 - 的的属性ID, questionID和answertype值是完全一样的。规范化按顺序进行。
问题是,什么被认为是冗员过多?在我们开始进行规范化步骤之前,线条在哪里绘制?
我在做一个在线课程,它提供了以下relvar例子,然后说:
嗯。虽然答案和answercode在每个不同的元组制作 每个元组在技术上独一无二的 - 的的属性ID, questionID和answertype值是完全一样的。规范化按顺序进行。
问题是,什么被认为是冗员过多?在我们开始进行规范化步骤之前,线条在哪里绘制?
正常化,不是用来减少冗余值的东西。它用于减少值之间的重复关联。换句话说,它意味着确保每一个事实都只记录一次。
要确定您是否需要规范化,请写出函数依赖关系,并查找异常的原因,如传递依赖性,部分关键字的依赖关系等。这些类型的冗余的每一种都在正常描述中明确定义在线表格和教科书中的表格。
在您的例子,如果我认为questionID -> answertype
,(questionID, answercode) -> answer
,那id
相当于questionID
和可以忽略不计,则关系仅仅是1NF因为answertype
是一种非主属性取决于密钥(questionID, answercode)
的一部分。如果更新是改变一些显示answertypes的值(但不是全部),您的数据将是逻辑损坏。规范化可以防止这种情况发生。
您的客户关心的准确性和一致性。你做?
所以我们什么时候开始正常化? “在别处清楚地描述”没有什么帮助。我们几乎每个relvar都会有重复的价值。所以当我们看到包含相同值的冗余依赖时,这是我们应该什么时候正常化的? –
忘记重复值。查看功能和多值依赖关系。将其与正常形式进行比较。是否有更新异常的风险?您是否希望通过设计确保完整性,或者您是否将自己的责任置于客户代码中,并在手动更新时承担责任?要么正常化或接受后果,这是您的选择。 – reaanb
https://en.wikipedia.org/wiki/Database_normalization – Bulat