Database design 如何教授数据库规范化?

Database design 如何教授数据库规范化?,database-design,normalization,Database Design,Normalization,数据库规范化的步骤和指导原则是什么?如果有一群具有良好计算机和逻辑技能的人,您如何向他们解释如何规范数据库设计?在1NF中获取属性(字段)列表并将其转换为数据库的思维过程是什么?2NF?3NF?只需选择3NF并专注于数据格式,一切都会很简单。或者你可能会走上完全错误的道路,使用E/R图只是为了把它们弄糊涂 查看其中一些资源: 或者给你的家人买一本我找到的学习数据库设计的最好的书: 迈克·埃尔南德斯 我的学习方式是从1NF、2NF、3NF、BCNF等逐步建立起来的,有点像历史课式的学习旅程

数据库规范化的步骤和指导原则是什么?如果有一群具有良好计算机和逻辑技能的人,您如何向他们解释如何规范数据库设计?在1NF中获取属性(字段)列表并将其转换为数据库的思维过程是什么?2NF?3NF?

只需选择3NF并专注于数据格式,一切都会很简单。或者你可能会走上完全错误的道路,使用E/R图只是为了把它们弄糊涂

查看其中一些资源:

或者给你的家人买一本我找到的学习数据库设计的最好的书:

迈克·埃尔南德斯


我的学习方式是从1NF、2NF、3NF、BCNF等逐步建立起来的,有点像历史课式的学习旅程

这真的取决于你的受众,直接转到3NF可能有点跳跃。

第一堂课之一——也是最重要的一堂课——是范式适用于单个表,而不是数据库。说“表'wibble'在BCNF中”是有意义的,但说“这个数据库在3NF中”是没有意义的

在与数据库开发人员打交道时,我经常看到两个大问题

  • 尝试基于列名而不是代表性样本数据规范化表
  • 不理解函数依赖关系

  • 这两者是相互关联的,因为函数依赖关系是根据值定义的,而不是根据列名定义的

    确保他们了解规范化规则是一项长期投资,这些规则是在维护非规范化数据库的过程中创建的。

    我发现教授良好的设计更为重要(适当时使用联接表,知道何时使用空值,何时使用代理键,…)当这个概念清楚时,告诉他们:你所做的实际上是1,2,3,…NF,因为


    这样,理论不会阻止你,你可以很好地设计数据库,然后知道它是NF。

    < P>我最喜欢的参考文献之一是

    < P>假设他们已经知道了基础概念(关系,候选关键字和函数依赖),然后从BCNF开始。到目前为止,BCNF是最容易解释的,比2NF、3NF重要得多,在这个阶段最好完全忽略它们。然后解释Join Dependency和5NF。

    早在20世纪80年代,我就曾教程序员这些东西。他们中的许多人甚至从未使用过数据库,尽管他们已经用COBOL、BASIC或C编程十年或更长时间了

    我曾经先教数据库编程,在开始数据库设计之前,我会教一些细节。在进入数据库设计之前,我用ER教授概念数据建模。然后,在教授表格组成时,标准化就自然而然地出现了。我只教1NF、2NF和3NF,不过如果我能回去再教一遍,我可能会包括BCNF


    护城河重要的是,不要把教书当成某种宗教。教他们在不遵守规范化规则时会发生什么,并让他们了解违反规范化可能有意义的情况。太多的初学者被教导这一点,就像违规是某种致命的罪恶。不是。

    Woah我们有一句话,你差不多总结了我大学的数据库课程,特别是军队的“E/R图表评论”。“好的判断力来自经验。经验来自坏的判断力。”“太多的初学者被教导这件事,就像违规是某种致命的罪恶。事实并非如此。”事实上,在这一点上,我会投Rooks的票。选择设计一个非规范化的数据库是一种致命的罪恶。它就在那里,有着时髦的气质和低V02_maxUhm的程序员,所以你想让他教他正在教的东西?那很好。我会告诉我的线性代数老师开始教线性代数。谁知道他会教其他人什么呢。哈哈——这是免费的,你不必买!虽然这些图像可能很古老,但它们只强调图像背后的哲学仍然有效,并且已经有效很长时间了!如果数据库中的每个关系都在BCNF中规范化,则关系数据库在BCNF中规范化。它同样适用于1NF、2NF等<数据库系统概念-Silberschatz、Korth、Sudarshan,第7.3.2节>我承认说“这个数据库中的每个表都在3NF中”是有道理的。但那是因为你还在谈论桌子。没有一个逻辑上的、保存信息的过程可以应用于数据库,将其从2NF更改为3NF。您可以对表应用一个逻辑的、信息保留的过程,将其从2NF更改为3NF。2NF和3NF都是根据函数依赖关系定义的。在数据库级别没有函数依赖关系,只有在表级别。