您是否使用依赖项和普通表单来设计关系数据库模式?

问题描述 投票:0回答:5

我有多年的软件工程师经验,并且与数据库(主要是Oracle和Postgres)进行了广泛的合作。我使用可能被称为数据库模式的非正式设计方法。我勾勒出类似E / R图的东西,然后我从那里生成DDL。随着时间的推移,我会随着更多要求的到来修改架构。我在计算机科学的学术方面接受了严格的培训,并且我写了关于数据库主题的硕士和博士论文。我理解依赖关系,正常形式和分解方法。我发现这种模式设计方法在现实世界中完全没用。

我现在正在教授关于数据库系统的高级课程,我尽职尽责地介绍了关于模式设计的经典材料,包括依赖关系,正规形式,分解。但我仍然不相信这种方法的实际价值。

关于这些理论主题的教科书讨论,从设计非常糟糕的模式开始,以及来自......嗯,我不知道的功能依赖性。他们只是在那里,然后他们引导您到更好的架构。但是从良好的实体/关系模型开始,您可能从一个非常好的模式开始。如果您了解您的实体是什么,以及它们的属性是什么 - 您基本上不是从已经在BCNF中的表开始的吗?

对于那些设计和维护模式的人,你真的使用依赖理论和普通形式吗?或者你就像我一样甩尾它?

database-design relational-database database-schema database-normalization functional-dependencies
5个回答
3
投票

教科书和课程通常用渐进式分解的例子来解释规范化 - 从模式开始,其中依赖关系没有被密钥正确执行,然后进展到更好的设计,满足BCNF,5NF等。这是一个用于解释一些概念和技术的教学练习;它不是应该如何进行实际数据库设计的蓝图。它类似于在数学课上练习长除法,不是因为该方法是常用的,而是因为基础算术的知识很重要。

我已经使用函数依赖性分析来解决一些困难的情况,验证设计并通过综合进行规范化。有一些CASE工具支持通过综合进行规范化,也许很多主流软件工具都不支持这种工具。


3
投票

当我构建数据库时,我通常从一个好的ER模型开始。我需要这个来检查我对主题的理解。在将ER模型转换为关系模型后,结果通常为3NF,通常在BCNF中。通常足够OLTP工作。对于OLAP工作,我使用了星型模式设计。这充满了更新异常,我通过小心ETL处理。只是我的看法。


3
投票

通常,对业务的深刻理解(通常通过详细阐述的概念建模获得)与不太缺乏设计实践经验相结合,足以在大多数用例中“从一开始就”获得5NF设计。因此,教科书通常说明/建议的“规范化程序”几乎从未实际实施过。应用这个程序是一种“自下而上”的方法,对于大多数练习设计师来说感觉非常不自然,他们非常喜欢“自上而下”从概念模型开始,这些概念模型通常已经完全按照你最终的方式“分解”应用规范化程序作为一种方法。

这并不意味着规范化理论本身可以走出窗外。它仍然构成了为什么某些设计比解决同一问题的其他替代设计“更好”的正式基础。

FD理论也是DBMS设计者应该知道的重要材料。例如,关系DBMS需要能够对关系表达式执行所谓的“键推断”(即,根据输入的键,计算哪些键的输出,例如JOIN,保证符合要求)。没有FD理论,这种推论是不可能的。)

至于“如果你了解你的实体是什么,以及它们的属性是什么 - 你基本上不是从已经在BCNF中的表开始的吗?” ,这确实取决于您的概念级实体已被“正确”识别(对于后一个词的某些含义 - 我所指的是,就像人们可以提出糟糕的数据库设计,他们也可以来糟糕的概念模型,如果你使用这样一个糟糕的模型来建立你的数据库设计,你可以猜出出来的是什么。


0
投票

reannb讨论了可以提供有关FD的信息的各种工件:领域专业知识,UI设计,FK约束,源代码,查询,与其他开发人员交谈。换句话说,你或者只是知道FD(领域专家,其他开发者),或者你正在寻找那些人的知识蒸馏(UI,FK,代码)。但领域专家从哪里获得FD?如果它不是E / R模型 - 无论是明确的还是内部的,直观的 - 那么FD的来源是什么?

Erwin Smout说,基本上,GIGO,这显然是正确的。但是,如果不是E / R模型,那仍然没有说明FD的来源。

所以我仍然不明白:FDs来自哪里,如果不是E / R模型?让我澄清一下:我并不是说规范化理论毫无用处,我同意Erwin Smout关于这个问题的观点。另外,我不是因为我是新手,(请参阅我的原帖)。我的问题与模式设计的教学有关。关于规范化理论的讨论似乎非常人为。他们从一个设计非常糟糕的架构开始,而且功能依赖性来自......好吧,他们从不说FD来自何处。应用规则瞧,我们有一个BCNF模式。在我看来,一个更合理,现实和有用的方法是:

  • 模式设计从E / R模型开始。
  • 以下是从E / R模型生成一组表和FK定义的过程。
  • 现在请注意,您的E / R模型实际上暗示了这些功能依赖性。
  • 然后进入归一化理论并展示BCNF分解(例如)如何从相当糟糕的起点产生相同的模式。
  • 如果继承了一个糟糕的模式,那么开发一个清晰的E / R模型和函数依赖可以帮助你找到一个好的模式。

0
投票

“你真的使用依赖理论和正常形式吗?或者你只是像我一样甩尾它?”

我已经设计了超过十五年的数据库模式。

但是,我从未使用过依赖理论(功能依赖性分析--FDA),我也没有使用过它。 然而,我的所有架构设计都是第五种正常形式。 (5NF)

我的秘诀是我使用称为“对象 - 角色建模”的形式方法我使用一个名为NORMA的免费工具来设计一个正式模型,NORMA工具可以从中自动生成5NF逻辑模型。

在建模过程中,我打开了一个“关系视图”窗口,可以在“当前状态”下自动立即生成我的对象 - 角色模型的5NF逻辑视图。

当我对我的设计感到满意时,我选择了一个目标RDBMS(例如SQL Server),稍后点击几下鼠标我就有了SQL DDL,然后我将其剪切并粘贴到SQL Server Management Studio的“新建查询”面板中。这种方法远比FDA更有效或翼翼化。

你可以download the free NORMA tool from heretutorials are here

顺便说一下 - 我最近听说过一个大学,他们倾向于实体关系建模,转而教授对象角色建模。

忏悔:我确实在几所大学课程中使用FDA作为学生,但这足以让我终生难忘!

© www.soinside.com 2019 - 2024. All rights reserved.