为什么数据库上存在“关系”而不仅仅是使用SQL的连接?

时间:2011-03-04 06:08:18

标签: database database-design

我总是在数据库文章或教程中看到或者......在他们使用数据库的任何地方,他们都使用一种称为关系的东西。我立即想到那些带有字段名称列表和一个字段连接到另一个带有一行的框中的字段的小框。

我不是数据库方面的专家(你可能已经知道了)但是我用过的一点点,我从不需要关系。它们似乎总是多余的,因为我总是可以使用JOIN来实现它对我来说的效果。他们是多余的还是你可以做任何与JOIN无关的关系?或者我只是胡说八道?

7 个答案:

答案 0 :(得分:5)

关系不只是关于SQL查询的连接。关系提供了许多好处:

  • 数据完整性
  • 查询便利性
  • 第三方工具集成优势
  • 使用数据库的未来dbas /开发人员的“自我描述”数据模型

数据完整性: 如果没有“客户记录”,关系有助于确保您的“订单记录”不存在。只需定义客户和订单之间的关系,数据库就可以确保不会发生这种情况。这有助于确保您的数据库不会成为大量的垃圾数据

查询方便: 关系可以使更容易进行某些类型的查询。由于客户与订单之间的关系,删除客户记录可以自动同时删除客户的订单

第三方工具集成的好处 许多第三方工具(O / R工具浮现在脑海中)依赖关系才能正常工作

真的,这个清单可以继续......你应该使用它们,它们非常有益。即使您今天没有意识到这一点,如果您正在开发一个将在很长一段时间内继续增长的数据库项目,那么从一开始就建立关系对您有利。

我认为它们对于小型项目/一次性数据模型并不是那么重要......但对于任何实质内容,你最好不要使用它们。

答案 1 :(得分:4)

RELATION是一组域(http://mathworld.wolfram.com/Relation.html)的笛卡尔积的子集。在日常用语中,关系(或更具体地说是关系变量)是大多数人称为表的数据结构(尽管SQL中的表不一定有资格作为关系)。

关系是关系数据库模型的基础。

关系是不同的东西。关系是语义“事物之间的联系”。

我认为你实际上是在询问参照完整性约束(外键)。外键是一种数据完整性规则,通过防止向其添加不一致的数据来确保数据库的一致性。不要将外键与关系混淆,因为它们是非常不同的东西。

答案 2 :(得分:2)

数据库背后的理论基于一种叫做 Relational Algebra 的东西。关系不是数据库特定术语,它源自关系代数。

JOIN是一种关系,可以有不同类型的关系。请参阅this wiki page以了解有关关系究竟是什么的更多信息。

答案 3 :(得分:2)

我假设你在阅读关系时它可能指的是外键。如果这是真的,关系和联接对于同一问题并不是不同的解决方案。它们是完成不同事物的两种工具,它们通常一起使用。

听起来像你知道的连接是一个选择查询的一部分,它允许你从多个表中获取行。

关系是定义规则的数据库结构的一部分。例如,如果您有城市表和国家/地区表,则应该有一个关系,将城市表中的每一行指向国家/地区表中的一行。这将确保数据的完整性,并且不允许城市行指向不存在的国家/地区行。

询问“为什么在使用连接时可以使用关系?”对我来说,听起来好像在问“为什么变量有类型的时候我还能阅读它们?”。

答案 4 :(得分:1)

RELATIONAL数据库中建立的关系是关系数据库模型的核心。在数据库中,我们为实体建模。我们使用实体之间的关系来维护数据完整性,并确保正确组织记录。关系还会在相关表之间创建索引。

如果您没有使用关系,和/或根据离散实体之间的关系对表结构建模,那么您无法利用关系数据库的真正威力。是的,你可以让查询工作,是的,你可以让Db做一些usefule工作。但是,您是否可以确保每个员工记录与适当的公司正确相关?您能确保该公司只有一条记录,并且该公司的所有公司都与该记录有关吗?

如果不围绕实体及其之间的关系设计数据库结构,您也可以使用电子表格或一个大的平面表。关系和正常化构成了现代关系数据库的基础。

答案 5 :(得分:1)

SQL表是关系模型关系的近似表。表/关系(基础,视图和查询结果)表示关系/关系/关联。这些是ER(实体关系)和伪ER图上的方框和菱形。这种图上的大多数线条对应于FK(外键)约束。它们经常但被错误地称为“关系”或“关系”,但事实并非如此。他们是事实。 SQL FK表示表的子行出现在其他地方,它们是PK(主键)或UNIQUE。等效地,它表示参与一种关系/关系/协会的实体也一次参与另一实体。表的含义对于查询来说是必要且足够的。不需要查询约束,包括PK,UNIQUE和FK。它们是表关系/关系/关联选择以及可能出现的情况/状态的结果。它们是由DBMS强制执行的完整性。

答案 6 :(得分:0)

当Ed Codd开发出用于大规模数据库的数据关系模型时,他的设计基于关系演算和代数的数学。这种数学的结果可以用数学精度预测,Ed Codd能够以接近数学的精度预测关系数据库在第一个数据库构建之前的行为。

在数学中,关系是一种数学抽象。另一个响应者说,它是两个或多个域的笛卡尔积的子集。如果那对你来说就像泥巴一样清晰,也许你不是数学家。

不管。一个优秀的计算机科学家可以非常容易地理解SQL表,并识别和利用SQL JOIN的强大功能。这种理解将取代对许多目的的关系的数学理解。 SQL表大致表示数学关系。如果您对表格设计非常小心,可以将“近似”变为“完全”。