Transactions 在Cassandra中使用轻量级事务强制实现唯一性

Transactions 在Cassandra中使用轻量级事务强制实现唯一性,transactions,cassandra,unique-constraint,Transactions,Cassandra,Unique Constraint,这更像是一个数据建模问题,但它与轻量级事务有关,因为尝试使用此功能似乎会影响我对数据建模的方式 我的特定用例是,我希望在INSERT上的特定字段上强制唯一性。卡桑德拉的文档有以下示例: INSERT INTO customer_account (customerID, customer_email) VALUES (‘LauraS’, ‘lauras@gmail.com’) IF NOT EXISTS; 在我的特殊情况下,我有下表: CREATE TABLE IF NOT EXISTS pl

这更像是一个数据建模问题,但它与轻量级事务有关,因为尝试使用此功能似乎会影响我对数据建模的方式

我的特定用例是,我希望在
INSERT
上的特定字段上强制唯一性。卡桑德拉的文档有以下示例:

INSERT INTO customer_account (customerID, customer_email) 
VALUES (‘LauraS’, ‘lauras@gmail.com’)
IF NOT EXISTS;
在我的特殊情况下,我有下表:

CREATE TABLE IF NOT EXISTS plugins (
    id uuid PRIMARY KEY,
    user_id uuid,
    name text,
    slug text,
    major_version int,
    minor_version int,
    patch_version int
);
我想要强制执行的约束是,
用户id
slug
主要版本
次要版本
补丁版本
的组合需要是唯一的。我不能简单地做:

INSERT INTO 
    plugins (
        user_id, 
        slug, 
        major_version, 
        minor_version, 
        patch_version
    ) VALUES (...) IF NOT EXISTS;
这是因为我需要
name
id
。但是,包括
name
id
仍然会导致写入内容,因为
如果不存在
将失败,因为
id
将不同(至少),
name
也可能不同

这是否意味着我需要维护一个单独的表,该表只有
用户id
slug
主要版本
次要版本
,以及
补丁版本
?然后,我将尝试写入此表,并查看操作的结果。如果写入成功,我将继续填充所有其他关联表


我知道非规范化是卡桑德拉生活中的一个事实;我只是想确保创建这个表来处理唯一性的情况是有意义的。如果这种方法没有意义,请建议另一种方法。谢谢

插入。。。如果不存在
如果不存在具有提供键的行,则创建新行。它不逐列比较,只比较键。如果要强制执行
用户id
slug
主要版本
次要版本
补丁版本
的唯一性,则这些列需要形成主键。

插入。。。如果不存在
如果不存在具有提供键的行,则创建新行。它不逐列比较,只比较键。如果要强制执行
用户id
slug
主要版本
次要版本
补丁版本
的唯一性,则这些列需要形成主键。

插入。。。如果不存在
如果不存在具有提供键的行,则创建新行。它不逐列比较,只比较键。如果要强制执行
用户id
slug
主要版本
次要版本
补丁版本
的唯一性,则这些列需要形成主键。

插入。。。如果不存在
如果不存在具有提供键的行,则创建新行。它不逐列比较,只比较键。如果您想强制执行
用户id
slug
主要版本
次要版本
补丁版本
的唯一性,那么这些列需要形成主键。

我明白了。这是否意味着我需要一个单独的表来维护这些字段作为主键?我的原始表有
id
有主键,因为我经常按id进行查找。酷!这就是我要找的。我只是想知道,仅仅为了实施这个约束而创建另一个表是否有意义。仔细想想,传统关系数据库中的所有索引和唯一约束都与表具有几乎相同的结构,其行为几乎与表相似。我明白了,他们只是在内部使用。这是否意味着我需要一个单独的表来维护这些字段作为主键?我的原始表有
id
有主键,因为我经常按id进行查找。酷!这就是我要找的。我只是想知道,仅仅为了实施这个约束而创建另一个表是否有意义。仔细想想,传统关系数据库中的所有索引和唯一约束都与表具有几乎相同的结构,其行为几乎与表相似。我明白了,他们只是在内部使用。这是否意味着我需要一个单独的表来维护这些字段作为主键?我的原始表有
id
有主键,因为我经常按id进行查找。酷!这就是我要找的。我只是想知道,仅仅为了实施这个约束而创建另一个表是否有意义。仔细想想,传统关系数据库中的所有索引和唯一约束都与表具有几乎相同的结构,其行为几乎与表相似。我明白了,他们只是在内部使用。这是否意味着我需要一个单独的表来维护这些字段作为主键?我的原始表有
id
有主键,因为我经常按id进行查找。酷!这就是我要找的。我只是想知道,仅仅为了实施这个约束而创建另一个表是否有意义。仔细想想,传统关系数据库中的所有索引和唯一约束都与表具有几乎相同的结构,其行为几乎与表相似。它们只是在内部使用