【问题标题】:How to create foreign key in Cassandra CQL如何在 Cassandra CQL 中创建外键
【发布时间】:2015-02-24 22:31:22
【问题描述】:

我正在尝试在 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 ) ;

用于相同目的的 Cassndra CQL 代码是什么?

【问题讨论】:

  • 您正在考虑使用 SQL 并转换为 noSQL。要掌握 noSQL,请考虑 noSQL。也就是说,范式不同,将 SQL 模式强行引入 noSQL 世界只会导致挫败感。
  • 好的。好吧,只是想帮助您过渡到 nosql 数据库。即使你有你的答案,请记住,SO 是为其他人保留信息,cmets 也可以帮助他们。
  • 谢谢。对不起,如果我早些时候粗鲁;)

标签: sql cassandra foreign-keys foreign-key-relationship cql


【解决方案1】:

简单的答案是:没有用于相同目的的 CQL 代码。

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

如果您需要表之间的约束,那么您需要在代码中进行处理。

【讨论】:

  • 那么,我唯一能做的就是通过代码控制它们?我不能以某种方式准备数据库来做类似的事情吗? (这次只是好奇)
  • @Sascuash Cassandra 和其他非关系数据库没有类似的概念,因为您应该对表进行建模以适应您的查询(例如,每个预期查询一个表)。使用这种方法,就不需要外键了。
  • 感谢您的信息;)
【解决方案2】:

“每个预期查询一个表)。使用这种方法,不需要外键”

这似乎有点误导。完全非规范化存在一致性风险 Cassandra... 确保一致性问题的最佳方法是使用 apply batch 命令批量执行语句,并提交全部或全部内容

【讨论】:

    猜你喜欢
    • 2012-07-28
    • 2017-05-19
    • 2013-07-16
    • 2015-08-22
    • 2014-03-27
    • 2017-09-25
    • 2017-04-13
    • 2014-05-06
    • 2015-03-24
    相关资源
    最近更新 更多