阅读此答案
关系数据库基于关系模型,这是一种在表中表示数据的直观、直接的方式。在关系数据库中,表中的每一行都是具有唯一 ID 的记录,称为键。表的列保存数据的属性,每条记录通常都有每个属性的值,便于建立数据点之间的关系。
Cassandra 有桌子。
CREATE TABLE movies (
movie_id UUID,
title TEXT,
release_year INT,
PRIMARY KEY (( movie_id ))
);
关系数据与 ACID 属性的支持无关。
关系数据与规范化数据无关
为什么 Cassandra 不被视为关系数据库?
为什么 Cassandra 被认为是 NoSQL 数据库?尽管它有桌子
Cassandra 不是 RDBMS,因为它不支持关系数据模型。
https://en.wikipedia.org/wiki/Relational_model
相反,它将数据建模为键值存储,其中值是行。但并不要求“表”中的所有“行”都具有相同的“列”,就像关系模型中的情况一样。
来自维基百科:
https://en.m.wikipedia.org/wiki/Apache_Cassandra
为什么 Cassandra 不是关系型的
其他答案很接近(我将解释为什么每个都不完整),但是文档中的这段文本突出了 Cassandra 非关系型的确切原因:
强制执行 PK/FK 关系的能力是 RDBMS 不可或缺的。引用 Codd 的数据库管理关系模型(强调我的):
您可以更改数据的存储方式(Codd 明确表示所有关系都可以表示为表,而不是必须这样表示),但是如果缺少将数据库保持在一致状态所需的元素,则系统无法调用自身一个关系数据库。
卡桑德拉是 NoSQL 吗?
从某种意义上说,其他任何东西都是。NoSQL 在很大程度上是一个营销术语,用于描述绕过关系数据库中感知缺陷的系统,他们将其与语言 SQL 混淆。
我们已经看到许多以“NoSQL”名义销售的东西,它们是面向表/行的,使用 RDBM 常见的索引方法,并且在过去几年中,增加了对 SQL 子集的支持。
在 Cassandra 的案例中,CQL 与 SQL 非常相似,因此您可以看到为什么描述相当模糊。
对其他答案的评论
我认为很容易被数据存储的物理实现所吸引,而不是数据存在的框架。
列存储是一种物理存储和检索数据的方法,它与关系模型无关。
同样,实体具有可选/未指定列的想法并不是 NoSQL 独有的——您当然可以使用子类型和/或 6NF 在关系数据库中实现类似的概念。
在 NoSQL 数据库系统(如 Cassandra)中存储和表示数据的方式与在 RDBMS 中存储和表示数据的方式不同。尽管有一个名为 Table 的对象,但它不会像 RDBMS 对 Table 那样对数据进行分类。例如,Cassandra 以列存储格式存储数据。(一些 RDBMS 也使用列存储,例如 PostgreSQL *with extensions,但大多数是行存储,例如 Microsoft SQL Server,它可以利用不同的数据结构进行索引,例如 B-Tree。)
主要区别在于 Cassandra 引擎中的算法被设计为能够有效地处理高变化或非结构化数据,而不是 RDBMS,它具有一组不同的算法来处理关系数据。
您可以在此处阅读有关Cassandra 的更多信息。