我知道像MySQL、PostgreSQL和MS SQL Server这样的解决方案是关系型数据库系统,而NoSQL、MongoDB等是非关系型数据库管理系统。
但是,这两种制度有何不同呢?
外行术语更可取。
谢谢。
发布于 2011-01-27 08:29:10
关系数据库有一定的数学基础(集合论、关系论),它们被提炼成SQL ==结构化查询语言。
NoSQL的多种形式(例如,基于文档、基于图形、基于对象、键值存储等)可能基于也可能不基于单一的数学理论。正如S.Lott正确指出的那样,hierarchical数据存储确实有数学基础。对graph databases来说也是如此。
我不知道用于NoSQL数据库的通用查询语言。
发布于 2011-01-27 09:12:38
嗯,不太确定你的问题是什么。
在标题中,你会问到数据库(DB),而在正文中,你会问到数据库管理系统(DBMS)。这两者是完全不同的,需要不同的答案。
DBMS是一个允许您访问数据库的工具。
除了数据本身,DB是数据如何结构化的概念。
因此,就像您可以使用非面向对象编译器使用面向对象方法进行编程一样,或者反之亦然,您可以在没有RDBMS的情况下设置关系数据库,或者使用RDBMS存储非关系数据。
我将重点讨论关系数据库(RDB)的含义,而不讨论系统对其他系统的作用。
关系数据库(概念)是一种数据结构,它允许您链接来自不同“表”或不同类型的数据桶的信息。数据存储桶必须包含所谓的键或索引(它允许唯一地标识存储桶中的任何原子数据块)。其他数据桶可以引用该键,以便在它们的数据原子和该键所指向的原子之间创建链接。
非关系数据库只存储数据,没有显式和结构化的机制来将来自不同存储桶的数据相互链接。
至于实现这样的方案,如果您有一个带有索引的纸质文件,并且在另一个纸质文件中引用索引来获取相关信息,那么您就实现了一个关系数据库,尽管这是一个相当简单的数据库。因此,您甚至不需要计算机(当然,如果没有计算机的帮助,它很快就会变得单调乏味),同样,您也不需要RDBMS,尽管可以说RDBMS是完成这项工作的合适工具。也就是说,对于不同的工具可以做什么有不同的选择,因此为工作选择正确的工具可能并不是那么简单。
我希望这是足够的外行术语,并有助于您的理解。
发布于 2011-01-27 08:53:48
你“知道”的大部分都是错的。
首先,正如一些关系专家经常(有时尖锐地)指出的那样,SQL并不像许多人认为的那样接近关系理论。其次,"NoSQL“的大部分区别与它是否是关系关系没有多大关系。最后,很难说"NoSQL“与SQL有什么不同,因为它们都代表了相当广泛的可能性。
您可以指望的一个主要区别是,几乎任何支持SQL的东西都支持数据库本身中的触发器之类的东西--也就是说,您可以在数据库中适当地设计规则,以确保数据始终保持内部一致。例如,您可以设置数据库断言一个人必须有一个地址。如果你这样做,任何时候你添加一个人,它基本上会迫使你将这个人与某个地址相关联。您可以添加一个新地址,也可以将它们与某个现有地址相关联,但无论如何,此人必须有一个地址。同样,如果您删除一个地址,它将强制您要么删除当前在该地址的所有人员,要么将每个人与其他地址关联。你可以对其他关系做同样的事情,比如说每个人都必须有一个母亲,每个办公室都必须有一个电话号码,等等。
请注意,这类事情也保证会自动发生,因此如果其他人在您添加person时查看数据库,他们要么根本看不到person,要么看到有地址的person (或母亲,等等)。
大多数NoSQL数据库都不会尝试在数据库中提供这种强制。这取决于您,在使用数据库的代码中,强制执行数据所需的任何关系。在大多数情况下,也可能看到只有部分正确的数据,所以即使你有一个家谱,每个人都应该与父母相关,有时你施加的任何限制都不会真正得到实施。有些人会让你随意这样做。其他人保证这只是暂时的,尽管它可以/将持续多长时间还有待商量。
https://stackoverflow.com/questions/4811744
复制相似问题