wol*_*ajr 14 terminology database-theory
这个问题有很多讨论:大型搜索引擎使用哪些数据库技术?
这么多的讨论让我感到困惑。那么……什么是数据库?只有关系数据库是“数据库”吗?面向对象的数据库是“数据库”吗?是否有任何允许我存储和检索信息(如地图、列表等)的系统是数据库?
或者数据库是否必须存储/检索信息并且还具有一些管理功能,例如用户和权限?dBase III 是否加上数据库,因为它不是真正的关系型数据库?
我将引用Dictionary.com,因为我认为这是数据库的含义:
为方便访问而组织的相关数据的综合集合,通常在计算机中。
在此定义下,您可以将数据库视为从成熟的 RDBMS(SQL Server、Oracle 等)到基本平面文件的任何内容。如果它存储数据,从技术上讲它可以被认为是一个数据库。
现在,就像我们现代世界中的大多数事物一样,名称具有公认的含义。而在数据库的情况下,这将因人而异。许多人认为数据库仅是由数据系统管理的实体。
值得注意的是@FrustratedWithFormsDesigner 的评论:
如果您删除了“......通常在计算机中”,卡片目录也会计数。
我同意这种说法,我并不一定认为数据库需要存在于“计算机”或任何电子设备中。卡片目录是非计算机化数据库的完美示例。
这是一个很好的问题和一组很好的答案。我认为讨论中缺少的一件事是深入研究数据库和数据库管理系统 (DBMS) 之间区别的答案。我喜欢 Shark 从 dictionary.com 提供的数据库定义。我认为这确实表明需要区分数据库和 DBMS。该数据库是“为方便访问而组织的相关数据的综合集合”。该定义的第二部分,即“通常在计算机中”是区别所在。如果它存储在计算机中,它可能会或可能不会存储在 DBMS 中。它可以存储在操作系统文件系统中。它可能存储在专有文件系统中。因此,我同意 FrustratedWithFormsDesigner 的观点,即卡片目录是一个“数据库” (也许 - 它是全面的和相关的吗?稍后会详细介绍)。它恰好存储在文件柜中。在当今世界上最“全面的相关数据集合,组织起来方便访问被存储在计算机上的,所以我不同意的鲨鱼,这是一个遗憾Dictionary.com添加的那部分。我认为这是绝对正确的——作为“数据库”的定义。
那么我们如何定义DBMS呢?我回到dictionary.com,发现了这个:
“一套程序,通常管理大量结构化的持久数据,为许多用户提供即席查询工具。它们广泛用于商业应用程序。”
这个定义还在继续,而且很长。它描述了 DBMS 提供的通用特性,例如安全性、数据完整性、事务管理、并发控制,以及最重要的 - 数据独立性。DBMS 提供了从物理存储方式中抽象出来的数据的外部视图。
使用这个定义,我认为很明显 DBMS 必须提供一个数据模型,这就是数据如何组织以呈现给用户。三种常见模型是分层(IMS)、网络(IDMS)和关系(DB2、Oracle、SQL-Server 等)。还有 OO 模型 (OODBMS)。只有今天的关系模型具有广泛的适用性。其他模型仍在使用中,但仅在利基情况下使用。DBMS 还必须提供提到的其他功能。我将这些统称为数据管理特性或能力。
因此,提供数据管理功能的软件产品是 DBMS,而不提供这些功能的产品不是DBMS。NoSQL 产品不是DBMS。这并不是说它们没有用,也不是说他们不存储“数据库”。我喜欢认为 DBMS,正如定义所说,解决了一类与业务应用程序相关的问题,如会计、工资、计费、客户关系管理、销售等。 NoSQL 产品,虽然不是 DBMS,但非常适合解决一类与传统业务应用程序无关但由于当今巨大的存储量和带宽计算技术而存在的问题。这些是诸如互联网搜索、在线拍卖、推特和脸书之类的应用程序。DBMS 不太适合解决这些问题,因为 DBMS 包含数据管理功能,虽然这些功能对于业务应用程序来说是绝对必要的,但对于解决 Craig' 的存储和检索没有用 s 列出广告或 twitter 提要(通常反正 - 这是另一个时间的另一个讨论:-))。这些问题需要大规模扩展和极快的响应,而 DBMS 的功能膨胀,并不适合。
数据专业人员需要了解所有这些用于存储数据的工具以及它们适合解决的问题类别,以便为工作选择合适的工具,就像总承包商必须知道他或她的建筑工具中的哪一个一样工作的正确工具。没有工具本身是好是坏。如果它非常适合解决重要问题,那就太好了。
最后,我将指出数据库和 DBMS 定义中的另外两个关键区别,这些区别在迄今为止的讨论中可能会被忽略。数据库的定义包括“相关数据的综合集合”。DBMS 的定义包括“管理大型结构化最好使用 MS Access 或其他一些关系 DBMS。因此,也许卡片目录毕竟不是数据库,因为虽然全面(它记录了图书馆中所有书籍的记录),但它并不相关,因为它仅包含有关书籍的信息,而不是有关作者、出版商的完整相关信息,等等。
其次,DBMS 擅长存储“结构化”数据。它完全基于具有结构化类型的离散数据元素的定义模式。NoSQL 产品,比如没有模式的键值存储,擅长存储非结构化数据。因此,该 NoSQL 产品不符合 DBMS 的定义。但是,如果您要解决的问题是非结构化数据的存储(在 DBMS 最初开发时我们甚至没有尝试这样做),并且您不需要独立于要写入的应用程序的数据管理功能处理非结构化数据,NoSQL 产品是一个完美的工具。
我希望这个答案能为这里发布的其他很棒的答案增加价值。我期待着任何其他人可能提出的任何评论和讨论点,这将有助于我们扩大对解决数据相关问题的数据库和技术类别的理解。
对我来说,数据库是为了存储和检索数据而存在的东西。我们称 Access 为数据库,尽管它实际上只是一个文件集合的漂亮前端。Outlook(至少在 Mac 上)将其消息存储称为数据库。有些人甚至称 Excel 为数据库(但这让我嗤之以鼻——所以某处有一条线)。
我认为这个定义随着时间的推移而演变,将 dictionary.com 与 wiki 以及过去 30 年中来自不同数据库专业人士的论文进行比较,将得出各种定义。并且定义也将继续发展。
如果您谈论的是您或您的应用程序用于存储或检索数据的某种数据源,无论它是否是关系数据,我都认为您将其称为数据库没有问题。如果它是一个文本文件,您可能会皱眉,但我不确定我是否理解需要以如此有限的方式确定定义,以至于人们对此感到愤怒。
显然,如果您甚至认为 BigTable(或 NoSQL 或 hadoop)是一个“数据库”,并声称这样称呼它会给(尤其是对新手)带来无限性能、永生的巨大希望和独角兽。而通常你只是说它是一个存储和检索数据的地方,对实际实现的作用没有任何保证,无论它是否是相关的,或者你是否可以在周日下午无聊时自己制作这样的东西。
我承认,当人们谈论关系数据库并将行称为“记录”或将列称为“字段”时,我会感到畏缩。但是,虽然这让我有点恼火,但我不会生气或特意纠正它们 - 有什么意义?我明白他们的意思,即使他们不是 100% 准确。
它可以非常通用,只是数据和结构的集合。管理数据库的系统可以像文件系统一样简单,也可以像 DNS 这样的联合系统一样复杂。
通常在现代用法中,当人们说数据库时,确实意味着数据存储和结构以及随附的数据库管理系统,并且由于在关系数据库的基础上已经做了很多理论工作,因此这些仍然是最受欢迎的通常,当人们说数据库时,通常是指关系数据库。
随着 NoSQL/非关系型数据库的兴起,数据库这个术语已经变得更加通用,并且可能更加模糊,因为无法假设用于理解数据的共享模型。
在建立关系理论之前,其他系统中的数据建模因系统而异,并且没有像关系模型那样具有共同的指导原则——使用了其他类型的数据库,例如层次数据库和网络数据库。