这个问题有很多讨论:大型搜索引擎使用哪些数据库技术?
太多的讨论使我感到困惑。那么...什么是数据库?关系数据库只是“数据库”吗?面向对象的数据库是“数据库”吗?有没有能让我存储和检索信息(例如地图,列表等)的数据库的系统?
还是数据库必须存储/检索信息,并且还具有某些管理功能(如用户和特权)?dBase III是否加上数据库,因为它并不是真正的关系数据库?
这个问题有很多讨论:大型搜索引擎使用哪些数据库技术?
太多的讨论使我感到困惑。那么...什么是数据库?关系数据库只是“数据库”吗?面向对象的数据库是“数据库”吗?有没有能让我存储和检索信息(例如地图,列表等)的数据库的系统?
还是数据库必须存储/检索信息,并且还具有某些管理功能(如用户和特权)?dBase III是否加上数据库,因为它并不是真正的关系数据库?
Answers:
这是一个很好的问题,也是一系列很好的答案。我认为讨论中缺少的一件事是深入探讨数据库与数据库管理系统(DBMS)之间的区别的答案。我喜欢Shark从dictionary.com提供的数据库定义。我认为这确实表明需要区分数据库和DBMS。该数据库是“为方便访问而组织的相关数据的全面集合”。该定义的第二部分即“通常在计算机中”是区别所在。如果将其存储在计算机中,则可能会或可能不会将其存储在DBMS中。它可以存储在OS文件系统中。它可能存储在专有文件系统中。因此,我同意FrustratedWithFormsDesigner的看法,即卡片目录是“数据库” (也许吧-它是否全面且相关?稍后会详细介绍)。它恰好存储在文件柜中。在当今世界上,最方便地访问的“相关数据”的最全面收集是存储在计算机上的,所以我不同意Shark所说的遗憾,Dictionary.com添加了这一部分。我认为这是绝对正确的-作为“数据库”的定义。
那么我们如何定义DBMS?我回到dictionary.com找到了:
“一套程序通常管理大型的持久化结构化数据集,为许多用户提供临时查询功能。它们广泛用于业务应用程序中。”
该定义继续进行,并且相当长。它描述了DBMS提供的常见功能,例如安全性,数据完整性,事务管理,并发控制,最重要的是-数据独立性。DBMS提供了从物理存储方式中抽象出来的数据的外部视图。
使用此定义,我认为很明显DBMS必须提供一个数据模型,这就是如何组织数据以呈现给用户的方式。三种常见模型是层次结构(IMS),网络(IDMS)和关系模型(DB2,Oracle,SQL-Server等)。还有OO模型(OODBMS)。如今只有关系模型具有广泛的适用性。其他模型仍在使用,但仅在特定情况下使用。DBMS还必须提供提到的其他功能。我将这些统称为数据管理功能。
因此,提供数据管理功能的软件产品是“ DBMS”,而没有提供这些功能的产品不是“ DBMS”。NoSQL产品不是 DBMS。那并不是说它们没有用,也没有用说他们不存储“数据库”。我喜欢认为DBMS',顾名思义,可以解决与业务应用程序有关的一类问题,例如会计,工资单,账单,客户关系管理,销售等。NoSQL产品虽然不是DBMS',但是非常适合解决以下问题:与传统业务应用程序无关的一类问题,但由于存在大量的存储和带宽计算技术,如今已存在。这些是互联网搜索,在线拍卖,推特和Facebook之类的应用程序。DBMS不适合解决这些问题,因为DBMS包含数据管理功能,虽然这对于业务应用程序是绝对必要的,但是对于解决Craig'的存储和检索没有用处。的列表广告或Twitter提要(通常无论如何-这是另一次讨论:-)。这些问题需要大规模扩展和极快的响应,而DBMS具有膨胀功能,因此不太适合。
数据专业人员需要了解所有这些用于存储数据的工具以及它们适合解决的问题类别,以便为工作选择合适的工具,就像总承包商必须知道他或她的哪种建筑工具是正确的工作工具。任何工具本身都不是好事。如果它很适合解决一个重要问题,那是很好的。
最后,我将指出数据库和DBMS定义中的另外两个关键区别,这在到目前为止的讨论中可能会被忽略。数据库的定义包括“ 全面收集相关数据”。DBMS的定义包括“管理大型结构化d最好使用MS Access或其他关系DBMS。因此,也许卡片目录毕竟不是数据库,因为它虽然很全面(它记录了图书馆中所有书籍的记录),但是却不相关,因为它仅具有有关书籍的信息,而没有关于作者,出版商,等等
其次,DBMS擅长存储“结构化”数据。它完全基于具有结构化类型的离散数据元素的已定义架构。NoSQL产品(例如没有模式的键值存储)擅长存储非结构化数据。因此,该NoSQL产品不符合DBMS的定义。但是,如果您要解决的问题是非结构化数据的存储(在最初开发DBMS时我们甚至没有尝试做的事情),并且您不需要独立于要编写的应用程序的数据管理功能处理非结构化数据时,NoSQL产品非常适合。
我希望这个答案可以为此处发布的其他出色答案增加价值。我期待任何其他人可能提出的任何评论和讨论要点,这将有助于我们所有人加深对解决数据相关问题的数据库和技术类别的理解。
我将引用Dictionary.com,因为我将其视为数据库的含义:
通常在计算机中为方便访问而组织的相关数据的全面收集。
在此定义下,您可以考虑从成熟的RDBMS(SQL Server,Oracle等)到基本平面文件的任何数据库。如果它存储数据,则从技术上讲可以将其视为数据库。
现在,就像我们现代世界中的大多数事物一样,名称已被接受。就数据库而言,因人而异。许多人仅将数据库视为由数据系统管理的实体。
值得注意@FrustratedWithFormsDesigner的评论:
如果您删除了“ ...通常在计算机上”,则卡片目录也将算在内。
我同意该声明,并且不一定认为数据库需要存在于“计算机”或任何电子设备中。卡片目录是非计算机数据库的完美示例。
对我来说,数据库是一种可以存储和检索数据的东西。我们称它为Access数据库,即使它实际上只是文件集合的漂亮前端。Outlook(至少在Mac上是)将其消息存储在数据库中。甚至有人将Excel称为数据库(但是这种情况让我感到sn之以鼻-某处有一行)。
我认为定义已经随着时间的推移而发展,并且在过去30年的过程中,对dictionary.com,Wiki和各种数据库专业人员的论文进行比较,将得出各种定义。而且定义也会继续发展。
如果您要谈论的是您或您的应用程序用于存储或检索数据的某种类型的数据源,无论它是否是关系型的,那么我称它为数据库都没有问题。如果是文本文件,则可能会引起您的注意,但是我不确定我是否需要以一种有限的方式来确定定义,以至于人们对此感到恼火。
显然,有些人会感到非常沮丧,如果您甚至暗示BigTable(或NoSQL或hadoop)是“数据库”,并声称这样调用将给(特别是对新手来说)无限的性能,永生的巨大希望。和独角兽。通常情况下,您只是说这是一个存储和检索数据的地方,而对实际实现的功能,是否相关或是否在星期日下午无聊时可以自己产生这样的东西没有任何保证。
我会承认,当人们谈论关系数据库并将行称为“记录”或将列称为“字段”时,我会感到畏缩。但是,虽然这让我有些不高兴,但我不会生气或不改正它们-这样做有什么意义?我理解它们的意思,即使它们不是100%准确。
它可能非常笼统,只是数据和结构的集合。用于管理数据库的系统可以像文件系统一样简单,也可以像DNS这样的联合系统一样复杂。
通常,在现代用法中,当说数据库时,确实暗示了数据存储和结构以及随附的数据库管理系统,并且由于在关系数据库的基础上进行了大量的理论工作,因此它们仍然是最受欢迎的通常,当人们说数据库时,常常暗示一个关系数据库。
随着NoSQL /非关系数据库的兴起,术语数据库已经变得更加通用,并且可能变得更加模棱两可,因为无法采用用于理解数据的共享模型。
在建立关系理论之前,其他系统中的数据建模因系统而异,并且没有关系模型所具有的共同指导原则,因此使用了其他类型的数据库,例如层次数据库和网络数据库。
我在dBASE Direct / 36和dBASE IV的开发过程中为Ashton-Tate工作,使用我的dBASE III Plus知识编写了一个小程序,以帮助测试dBASE Direct / 36(IBM System / 36微型计算机的接口)。我们必须对System / 36 SQL表进行二进制的load和call语句,这需要重复输入相同的“ load”和“ call”语句,同时在提交时更改表名和字段名以从每条记录或每条记录中获取数据。几条记录组成的组,具体取决于查询的范围。dBASE III Plus是一种数据库编程语言,它使我可以创建“ dbldot.prg”,它可以将单点提示更改为双点,因为我被设计为指示系统处于SQL检索模式的指示符,以及文本在命令行下方,“
那时dBASE是一种数据库编程语言,或更准确地说,是一种能够处理数据记录的程序语言。记录是一组字段,其中包含单个项目的数据,例如人员LAST_NAME,FIRST_NAME,ADDRESS,CITY,ST,ZIP,PLUS_FOUR,SSN等。这些结构后来在表格中表示,并按行和列进行组织,行是单个记录,列是每个字段名称的一系列记录中的数据。通过这种方式,用户可以轻松地按字段名称排序,以按特定的通用字段(例如CITY,ST,ZIP等)对记录进行排序和分组。
dBASE语言允许用户或程序员处理数据,执行排序,显示表,记录和执行计算(Y2K距离很远,但必须将日期转换为YYYYMMDD才能对输入的MM-DD-YYYY数据进行排序,可以使用DtoC和CtoD(日期到字符,字符到日期)来完成。如果没有dBASE语言,则数据文件将仅仅是具有公共字段(列)的一系列记录(行)。
关系数据库-关系术语,用于将一个以上的数据库(表)与另一个包含不同信息但包含一个或多个公共字段的数据库进行交叉引用。例如,名为“地址”的数据库包含“ LNAME”,“ FNAME”,“ ADDRESS”,“ CITY”,“ ST”,“ ZIP”,“ SSN”。另一个名为“ CHECKING”的数据库包含“ ACCOUNT_NO”,“ ROUTING_NO”,“ CUSTLAST”,“ CUSTFIRST”,“ DOB”,“ SSNO”,“ CUST_NO”。尽管字段名称不同,但是它们中的一些包含相同的信息,可以相互链接以将来自一个数据库的数据绑定到另一个数据库,例如,将对帐单发送给银行客户,使用名字和姓氏字段以及SS编号关联数据,从一个数据库中提取客户的地址,并从另一个数据库中提取要放入对帐单的帐户信息。然后,可以进行更大范围的邮件合并功能,以对ADDRESS数据库中的每个单独客户执行这些操作,提取每个客户的相关帐户信息,个性化对帐单,打印并解决每个客户的问题,然后再转到下一个记录或客户。
因此,像MS ACCESS之类的东西可能更像是DBMS,但在基本级别上,dBASE是一种语言,用于创建前端用户界面并执行数据库之间的所有数据操作以在数据库之间创建关系并为我们只是人类使用。
此后发生了很多变化,但基础保持不变。数据仍然包含在包含各种数据类型的一系列字段的记录中,并且必须通过一个或多个公共数据点进行交叉引用并与其他数据库合并,从而允许我们使用信用卡,在网上设置帐户使用我们的Google,Facebook,Twitter ID,跟踪我们的购买历史记录等等。我们的生活只是一系列重叠的关系数据库的一部分,我们每天都在遍历这些关系数据库,而没有考虑正在相互作用的所有点点滴滴,从而带给我们今天生活中的愉悦和持续的轻松。
至少,这就是我多年来对dBASE II始于1984年的软件和硬件测试的一贯了解。
Codd的开创性论文的标题为大型共享数据库的数据关系模型。他称其为“数据库”,我们称其为数据库。
我喜欢他的形象。它意味着可以放置数据的地方,它知道数据将被安全保存,正确说明并仅退还给那些可以证明他们有权访问它们的人。如果我们的分行被抢劫,我们可以保证银行公司有足够的备用资源,以确保我们的宝贵资源不会不可挽回地丢失。
一个数据库是相关数据的集合。
他们接着说,常见用途受到更多限制,
数据库具有以下隐式属性:
- 数据库代表现实世界的某些方面,有时也称为微型世界或话语世界(UoD)。微型世界的更改反映在数据库中。
- 数据库是具有某些固有含义的逻辑上一致的数据集合。随机分类的数据不能正确地称为数据库。
- 为特定目的设计,构建并填充数据的数据库具有特定的用户群和这些用户感兴趣的一些先入为主的应用程序。
从任何意义上说,数据库都没有明确地定义为“关系”,但是经常有人假设它是因为行业已经饱和了一种特定类型的DBA,并且可以说最先进的DBMS软件都是关系型的。从关系数据库字典
严格来说,是一个数据库值,qv;在本词典中,更常用的是指更准确地称为数据库变量的变量qv。在本词典中,我们假设数据库始终是关系的,除非有明确的陈述相反。注意:“数据库”一词在非关系上下文中也用于表示其他各种事物:例如,物理存储数据的集合。还经常使用它来表示DBMS,但是强烈建议不要使用这种特殊用法。(如果我们将DBMS称为数据库,那么我们将数据库称为什么?)
最后一点很重要,我也喜欢DBMS / RDBMS与数据库本身之间的区别。