AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 111487
Accepted
Gordon Royle
Gordon Royle
Asked: 2015-08-19 18:28:04 +0800 CST2015-08-19 18:28:04 +0800 CST 2015-08-19 18:28:04 +0800 CST

学习关系代数背后的实际原因是什么?

  • 772

学习如何在关系代数中制定类似查询的表达式是许多(也许是大多数)“数据库简介”课程的传统部分。

关系代数通常是关系数据库的数学基础,尤其是 SQL 的数学基础,这通常是合理的,这意味着了解它很重要。

然而,在我看来,在关系代数中制定表达式与在 SQL 中制定查询基本相同,并且这两项任务的思维过程基本相同。特别是,我真的看不出了解关系代数可以更轻松地编写 SQL 查询,反之亦然。这让我想知道关系代数的教学是否只是某种历史遗留问题,或者了解它是否真的有特定的好处。

所以我的问题是“了解关系代数是否有具体的实际好处,是否足够重要以使其值得教授?”

作为数据库管理员,您是否觉得关系代数对您的职业轨迹很重要?

一个子问题是花在学习关系代数上的时间是否可以通过学习更多的 SQL 来更有效地利用?

relational-theory learning
  • 2 2 个回答
  • 6831 Views

2 个回答

  • Voted
  1. Best Answer
    Todd Everett
    2015-08-19T20:37:38+08:002015-08-19T20:37:38+08:00

    当 Codd 定义关系模型时,他定义了一组可以应用于关系的运算符。在指定关系代数时,就像指定整数代数一样,我们能够使用符号代替关系来解决查询。这些运算符与整数代数运算符(+、-、*、/)具有相同的代数属性。因此,我们可以假设某些规律总是适用于经历该操作的关系,任何关系。例如,在整数代数中,我们知道加法和乘法是关联的,因为我们可以改变操作数的分组而不改变结果:

    a + ( b + c ) = ( a + b ) + c

    类似地,在关系代数中,我们知道自然连接是结合的,因此知道 A 连接 B 连接 C 可以按任何顺序执行。这些属性和规律创造了重写查询公式的能力,并保证获得相同的结果。数据库专业人员的应用数学一书提供了有关各种重写规则的重要细节,您可以使用这些规则以不同的方式精确地制定相同的查询。在完美的世界中,任何产生相同结果的配方都将具有相同的性能。现代优化器虽然是一款了不起的软件,但并不完美。因此,如果您以一种方式制定查询并且性能很差,那么您拥有以不同方式制定查询的技能并且知道它具有相同的语义。另一个实际优势是数据库约束的规范。首先,了解关系代数使您能够确定制定约束的最简单方法。其次,通过在形式逻辑中制定约束,您可以立即澄清业务主题专家的任何歧义,他们用宽松的英语制定业务规则并避免错误。

    列奥纳多·达·芬奇说:

    爱实践却没有理论的人,就像没有船舵和指南针的水手上船,永远不知道自己可以投向哪里。

    同样,不了解关系理论基础的数据从业者无法像他们那样完全掌握技术。关于关系代数的一些很好的参考资料是 SIRA_PRISE 的关系代数介绍页面和 CJ Date 的SQL 和关系理论。Date 的书展示了理解关系代数的实用性,以便您可以编写更准确的 SQL 查询。SQL 有许多怪癖和陷阱,并且对它的工作原理与原始关系代数运算符有一个很好的掌握,这确实有助于了解陷阱在哪里并避免它们。

    • 11
  2. Erik
    2015-08-19T19:24:36+08:002015-08-19T19:24:36+08:00

    我强烈认为你可以在不参加正式的关系代数课程的情况下成为一名成功的 DBA,就像你可以成为一名成功的程序员而不参加正式的离散数学课程一样。参加关系代数课程的需要在很大程度上取决于您的职业道路/目标。 请参阅编程 StackExchange 上的这个问题。OP 想获得算法等方面的硕士学位。我想说的是,很明显,他需要学习并掌握离散数学。同样,如果您的目标是编写数据库引擎或成为主要关系数据库引擎的核心团队的一员,那么我强烈建议您掌握关系代数、统计信息等。

    话虽这么说,研究关系代数所获得的见解很可能会帮助您理解为什么查询会表现得像现在这样,如果没有别的,这对于故障排除很有价值。研究和研究围绕关系逻辑的正式研究也会在其他方面帮助你。

    例如,我在关系理论方面没有太多的正式知识,但我可以一起破解一个体面的查询,并对如何设计好的解决方案有一个体面的一般认识。话虽如此,我很难真正理解 MDCCL等用户的一些优秀答案,因为我不能真正完全遵循符号和/或概念。我不知道MDCCL有没有受过正规训练,但我觉得理论基础比较扎实会让我有能力打到MDCCL的水平。

    这只是一个例子,它显示了关系代数等的真正价值并不一定在于将其直接应用于 SQL,而是允许您在更高层次上消化知识。

    MDCCL 我希望我在这个答案中叫你出来是可以的。如果你不想在这篇文章中被提及,请告诉我,我会编辑你。

    • 4

相关问题

  • SQL Profiler 新手教程

  • 标准化应该走多远?

  • 兼职DBA有哪些学习资源?

  • 如何构建模型以正确有效地表示关系数据库上的树状数据?

  • 在工作场所教授 SQL 的一些有用的 SQL 谜题在哪里?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve