如何在Cassandra CQL中创建外键

12

我正在尝试在Cassandra中复制一个SQL数据库,虽然创建表格没有问题,但我发现很难找到一个易于理解的示例,显示如何在Cassandra中创建外键。

如果我在SQL中有这个:

CREATE TABLE COOP_USUARIO (
 CI                   VARCHAR2 (13 BYTE) NOT NULL ,
 CUENTA               VARCHAR2 (20 BYTE) NOT NULL ,
 NOMBRE               VARCHAR2 (50 BYTE) NOT NULL ,
 EMAIL                VARCHAR2 (255 BYTE) NOT NULL ,
 DIRECCION            VARCHAR2 (255 BYTE) ,
 CIUDAD               NUMBER NOT NULL ,
 TELEFONO             VARCHAR2 (10 BYTE) NOT NULL ,
 TIPO_PERSONA         NUMBER (1) NOT NULL ,
);
 CREATE UNIQUE INDEX COOP_USUARIO_PK ON COOP_USUARIO(
 CI ASC
);
ALTER TABLE COOP_USUARIO ADD CONSTRAINT COOP_USUARIO_PK PRIMARY KEY ( CI ) ;

CREATE TABLE COOP_CIUDADES
(
 ID        NUMBER NOT NULL ,
 NOMBRE    VARCHAR2 (25 BYTE) NOT NULL ,
 PROVINCIA NUMBER NOT NULL
) ;
CREATE UNIQUE INDEX COOP_CIUDADES_PK ON COOP_CIUDADES
(
  ID ASC
);
ALTER TABLE COOP_CIUDADES ADD CONSTRAINT COOP_CIUDADES_PK PRIMARY KEY ( ID ) ;


ALTER TABLE COOP_USUARIO ADD CONSTRAINT COOP_USUARIO_CIUDADES_FK FOREIGN KEY ( CIUDAD ) REFERENCES COOP_CIUDADES ( ID ) ;

同样的目的,Cassandra CQL代码是什么?


4
你正在用SQL的思维来翻译noSQL。要掌握noSQL,就要用noSQL的思维方式去思考。也就是说,这两种范式是不同的,把SQL模式强行应用到noSQL世界中只会导致沮丧。 - Don Branson
2
好的。嗯,只是想帮助你过渡到nosql数据库。即使你已经得到了答案,也要记住SO是为了保存信息供其他人使用,评论也可以帮助他们。 - Don Branson
谢谢。如果我之前有失礼,请原谅 ;) - Sascuash
3个回答

34

简单回答是:没有相同目的的CQL代码。

CQL没有外键概念或任何表之间约束的概念,就像您不能在表之间执行联接一样。

如果您需要在表之间应用约束,则需要在代码中处理此问题。


那么,我唯一能做的就是通过代码来控制它们吗?我不能以某种方式准备数据库来做类似的事情吗?(这次只是好奇) - Sascuash
3
Sascuash Cassandra 和其他非关系型数据库没有类似的概念,因为你应该根据查询需求来设计数据表(也就是说,每个预期的查询应该有一个相应的表)。采取这种方法,就不需要外键。 - Aaron
谢谢你的信息 ;) - Sascuash

1
"

每个预期查询都有一个表。采用这种方法,就不需要外键。

这似乎有点误导。在Cassandra中完全去规范化会存在一些一致性风险...确保免受一致性问题的最佳方法是使用批处理语句,并使用apply batch命令进行全部或无操作提交。

"

-1
from django.db import models

# Create your models here.

import uuid
from cassandra.cqlengine import columns
from django_cassandra_engine.models import DjangoCassandraModel
class TestModel(DjangoCassandraModel):
    example_id=columns.UUID(primary_key=True, default=uuid.uuid4)
    json_data =columns.Text(required=False)


从django.db导入models

在这里创建你的模型

import uuid from cassandra.cqlengine import columns from django_cassandra_engine.models import DjangoCassandraModel class TestModel(DjangoCassandraModel): example_id = columns.UUID(primary_key=True, default=uuid.uuid4) json_data = columns.Text(required=False)
- azaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接