为什么 Cassandra 不被视为关系数据库?

ove*_*nge 0 nosql rdbms cassandra relational-theory

阅读这个答案

关系数据库基于关系模型,这是一种在表中表示数据的直观、直接的方式。在关系数据库中,表中的每一行都是一条记录,具有唯一的 ID,称为键。表的列保存数据的属性,每条记录通常每个属性都有一个值,便于建立数据点之间的关系。

卡桑德拉有桌子。

CREATE TABLE movies (
    movie_id UUID,
    title TEXT,
    release_year INT,
    PRIMARY KEY (( movie_id ))
);
Run Code Online (Sandbox Code Playgroud)

关系数据与支持 ACID 属性无关。

关系数据与规范化数据无关


  1. 为什么 Cassandra 不被认为是关系型数据库?

  2. 为什么 Cassandra 被认为是 NoSQL 数据库?尽管它有桌子

Dav*_*oft 6

Cassandra 不是 RDBMS,因为它不支持关系数据模型。

关系模型的基本假设是所有数据都表示为数学 n 元关系,n 元关系是 n 域的笛卡尔积的子集

https://en.wikipedia.org/wiki/Relational_model

相反,它将数据建模为键值存储,其中值是行。但是并不要求“表”中的所有“行”都具有相同的“列”,就像关系模型中的情况一样。

来自维基百科:

与 RDBMS 中的表不同,同一列族中的不同行不必共享同一组列,并且可以随时将一列添加到一行或多行。 [29]

Cassandra 中的每个键对应一个值,该值是一个对象。每个键都有作为列的值,并且列被组合成称为列族的集合。因此,每个键标识一行可变数量的元素。这些列族可以被视为表。Cassandra 中的表是一个由键索引的分布式多维映射。此外,应用程序可以指定超级列或简单列族中列的排序顺序。

https://en.m.wikipedia.org/wiki/Apache_Cassandra


小智 5

为什么 Cassandra 不是关系型的

\n

其他答案很接近(我将解释为什么每个答案都不完整),但是文档中的这段文本突出显示了 Cassandra 非关系型的确切原因:

\n
\n

Apache Cassandra 没有外键或\n关系完整性的概念。

\n
\n

强制 PK/FK 关系的能力是 RDBMS 不可或缺的一部分。引用 Codd 的数据库管理关系模型(强调我的):

\n
\n

1.2.4 功能的省略 在实现关系数据库管理系统时,会出现许多关于关系模型的问题。有时,对某些基本功能的支持会被忽略,因为它被评估为无用。不幸的是,关系模型始终具有密不可分地交织在一起的特征。这意味着在 DBMS 中省略模型的一项功能可能会阻碍许多其他功能的实现。例如,省略对主键和外键(在第 1.8 节中定义)的支持会危及

\n

\xe2\x80\xa2 查看可更新性(参见第 17 章),

\n

\xe2\x80\xa2 主要完整性约束(参见第 13 章),以及

\n

\xe2\x80\xa2 逻辑数据独立性(参见第 20 章)。

\n
\n

您可以更改数据的存储方式(Codd 明确表示所有关系都可以表示为表,但并不是说它们必须如此表示),但如果缺少维持数据库处于一致状态所需的元素,则系统无法调用自身关系数据库。

\n

Cassandra 是 NoSQL 吗?

\n

从某种意义上说,其他任何事情都是如此。NoSQL 在很大程度上是一个营销术语,用于描述规避关系数据库中已知缺陷的系统,他们将其与 SQL 语言相混淆。

\n

我们已经看到许多以“NoSQL”销售的东西,它们是面向表/行的,使用 RDBM 常见的索引方法,并且在过去几年中增加了对 SQL 子集的支持。

\n

在 Cassandra 的例子中,CQL 与 SQL 出奇地相似,因此您可以明白为什么描述相当模糊。

\n

对其他答案的评论

\n

我认为很容易陷入数据存储的物理实现,而不是数据存在的框架。

\n

列存储是一种物理存储和检索数据的方法,它与关系模型无关。

\n

同样,实体具有可选/未指定列的想法并不是 NoSQL 独有的 - 您当然可以使用子类型和/或 6NF 在关系数据库中实现类似的概念。

\n

  • “关系”中的“关系”是这个https://en.wikipedia.org/wiki/Relation_(database) (3认同)
  • 您将引用完整性约束中涉及的表之间的“关系”(我可能会称之为“关系”)和关系理论中的“关系”(作为元组集合)混为一谈。这些是不同的事情。 (2认同)