2

起初我以为它不是关系数据库,但在我读到我可以加入表并且它写在他们的网站https://crate.io/overview/(请参阅用例)上之后,我不确定.

特别是我对这句话感到困惑:

CrateDB 基于 NoSQL 架构,但具有标准 SQL。

来自https://crate.io/overview/high-level-architecture/

4

3 回答 3

6

根据Codd 的 12 条规则(已用于识别关系数据库),CrateDB 还不是关系数据库。CrateDB 的最终一致性模型并不禁止这样做。

规则 0:对于任何被宣传为或声称是关系数据库管理系统的系统,该系统必须能够完全通过其关系能力来管理数据库。

CrateDB 没有其他可以插入、检索和更新数据的接口。

规则 1:关系数据库中的所有信息都在逻辑级别以一种方式明确表示 - 由表中的值表示。

正是在 CrateDB 中可以找到的内容。

规则 2:关系数据库中的每个数据(原子值)都可以通过表名、主键值和列名的组合来保证在逻辑上是可访问的。

这是严格执行的。通过主键访问甚至会给你写后读的一致性。

规则 3:完全关系 DBMS 支持空值(与空字符串或空白字符串不同,与零或任何其他数字不同)以系统的方式表示缺失信息和不适用信息,与数据类型无关。

CrateDB 支持 null。

规则 4:数据库描述在逻辑级别上以与普通数据相同的方式表示,以便授权用户可以将相同的关系语言应用于其查询,就像他们应用于常规数据一样。

CrateDB 有其他元表、信息模式表

规则 5:一个关系系统可以支持多种语言和多种终端使用模式(例如,填空模式)。但是,必须至少有一种语言的语句可以按照某些明确定义的语法表达为字符串,并且可以全面支持以下所有项目:

  • 数据定义。
  • 查看定义。
  • 数据操作(交互式和程序)。
  • 完整性约束。
  • 授权。
  • 事务边界(开始、提交和回滚)。

CrateDB 支持数据定义和数据操作部分,并且仅支持单个完整性约束(主键)。这绝对是不完整的。

规则 6:理论上可更新的所有视图也可由系统更新。

CrateDB 还不支持视图。

规则 7:将基本关系或派生关系作为单个操作数处理的能力不仅适用于数据的检索,也适用于数据的插入、更新和删除。

CrateDB 目前仅用于数据检索...

规则 8:只要存储表示或访问方法发生任何更改,应用程序和终端活动在逻辑上保持不受阻碍。

CrateDB 对 SQL 的使用允许这样做;性能/存储级别的改进甚至可以通过系统升级来实现。

规则 9:当对基表进行理论上允许不受损害的任何类型的信息保存更改时,应用程序和终端活动在逻辑上保持不受损害。

其中的一部分仍然缺失(视图、连接上的插入/更新)。但是,对于检索数据,情况已经如此。

规则 10:特定于特定关系数据库的完整性约束必须可以在关系数据子语言中定义,并且可以存储在目录中,而不是存储在应用程序中。

这对于分布式数据库来说是相当棘手的,特别是外键约束。CrateDB 目前只支持主键约束。

规则 11:关系 DBMS 具有分布独立性。

在 CrateDB 中,任何类型的分片/分区/分发都是透明地为用户处理的。数据分布的任何类型的约束/设置都应用于数据定义级别。

规则 12:如果关系系统具有低级(一次单个记录)语言,则该低级不能用于破坏或绕过以更高级别关系语言(多条记录)表示的完整性规则和约束。一次记录)。

有人可能会争辩说,这COPY FROM直接违反了这条规则,因为下面没有发生类型检查和转换。但是,没有其他允许数据操作的命令/语言/API。

虽然 CrateDB 肯定有一些追赶的工作,但它没有理由不会很快成为这种意义上的关系数据库。它的SQL 支持可能无法与 Oracle 或 Postgres 相提并论,但许多人可以在没有一些非常特定于用例的特性的情况下生活。

如上所述,以上所有规则都没有直接违反,而是尚未以令人满意的方式实施,因此 CrateDB 没有理由最终不能成为完全关系型数据库。

(免责声明:我在那里工作)

于 2016-12-09T09:22:31.700 回答
0

自关系模型开始以来,系统必须被视为关系的三个主要组件是(将 Codd 的“数据模型”的三组件定义应用于关系模型):

  • 数据表示为关系(表格)
  • 操作是通过关系和/或逻辑运算符/表达式
  • 完整性由关系和/或逻辑运算符/表达式强制执行

此外,多用户 DMBS 被理解为支持明显的原子持久事务,同时受益于通过重叠执行 (ACID) 的实现,分布式 DBMS 被理解为支持明显的单个数据库,同时受益于多个站点的实现。

根据这些标准,CrateDB 不是关系型的。

它有表格,但它对表格的操作极其有限,而且几乎没有完整性功能。重新操作,它允许查询满足条件(包括聚合)的表的行,并且它允许连接多个表,但这没有优化,即使对于等连接也是如此。重新约束,它的唯一功能是列类型、主键和非空列。它使用 SQL 的一小部分

请参阅链接中有关支持的功能标准 SQL 合规性的页面,如下所述:

Crate SQL
    Data Definition
        Constraints (PRIMARY KEY Constraint, NOT NULL Constraint)
        Indices
    Data Manipulation
    Querying Crate
        Retrieving Data (FROM Clause, Joins)
    Joins
    Crate SQL Syntax Reference

与非关系 DBMS 一样,它们的文档并不反映对关系模型或其他基本 DBMS 功能的理解或欣赏。

于 2016-12-09T03:06:16.183 回答
-1

CrateDB 是一个分布式 SQL 数据库。底层技术类似于所谓的 NoSQL 数据库通常使用的技术(无共享架构、列索引、最终一致性、对半结构化记录的支持)——但可以通过传统的 SQL 接口对其进行访问。

因此 - 是的,CrateDB 有点像关系 SQL DB

于 2016-12-08T22:12:39.237 回答