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 属性无关。
关系数据与规范化数据无关
为什么 Cassandra 不被认为是关系型数据库?
为什么 Cassandra 被认为是 NoSQL 数据库?尽管它有桌子
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\n\nApache Cassandra 没有外键或\n关系完整性的概念。
\n
强制 PK/FK 关系的能力是 RDBMS 不可或缺的一部分。引用 Codd 的数据库管理关系模型(强调我的):
\n\n\n1.2.4 功能的省略 在实现关系数据库管理系统时,会出现许多关于关系模型的问题。有时,对某些基本功能的支持会被忽略,因为它被评估为无用。不幸的是,关系模型始终具有密不可分地交织在一起的特征。这意味着在 DBMS 中省略模型的一项功能可能会阻碍许多其他功能的实现。例如,省略对主键和外键(在第 1.8 节中定义)的支持会危及
\n\xe2\x80\xa2 查看可更新性(参见第 17 章),
\n\xe2\x80\xa2 主要完整性约束(参见第 13 章),以及
\n\xe2\x80\xa2 逻辑数据独立性(参见第 20 章)。
\n
您可以更改数据的存储方式(Codd 明确表示所有关系都可以表示为表,但并不是说它们必须如此表示),但如果缺少维持数据库处于一致状态所需的元素,则系统无法调用自身关系数据库。
\n从某种意义上说,其他任何事情都是如此。NoSQL 在很大程度上是一个营销术语,用于描述规避关系数据库中已知缺陷的系统,他们将其与 SQL 语言相混淆。
\n我们已经看到许多以“NoSQL”销售的东西,它们是面向表/行的,使用 RDBM 常见的索引方法,并且在过去几年中增加了对 SQL 子集的支持。
\n在 Cassandra 的例子中,CQL 与 SQL 出奇地相似,因此您可以明白为什么描述相当模糊。
\n我认为很容易陷入数据存储的物理实现,而不是数据存在的框架。
\n列存储是一种物理存储和检索数据的方法,它与关系模型无关。
\n同样,实体具有可选/未指定列的想法并不是 NoSQL 独有的 - 您当然可以使用子类型和/或 6NF 在关系数据库中实现类似的概念。
\n