Това е по-скоро въпрос за моделиране на данни, но е свързан с леки транзакции, защото изглежда, че опитът да се използва тази функция оказва влияние върху начина, по който моделирам данните си.
Моят специфичен случай на употреба е, че искам да наложа уникалност на конкретни полета на INSERT
. Документацията на Cassandra има следния пример:
INSERT INTO customer_account (customerID, customer_email)
VALUES (‘LauraS’, ‘[email protected]’)
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
);
Ограничението, което искам да наложа е, че комбинацията от user_id
, slug
, major_version
, minor_version
и patch_version
трябва да бъде уникална. Не мога просто да направя:
INSERT INTO
plugins (
user_id,
slug,
major_version,
minor_version,
patch_version
) VALUES (...) IF NOT EXISTS;
Това е така, защото имам нужда от name
и id
. Въпреки това, включването на name
и id
пак ще доведе до записване на нещата, защото IF NOT EXISTS
ще се провали поради факта, че id
ще бъде различно (най-малкото), а name
също може да е различно.
Това означава ли, че трябва да поддържам отделна таблица, която има само user_id
, slug
, major_version
, minor_version
и patch_version
? След това бих се опитал да пиша в тази таблица и да погледна резултата от операцията. Ако записът успее, ще продължа и ще попълня всички други свързани таблици.
Знам, че денормализирането е факт от живота с Касандра; Просто искам да се уверя, че тук има смисъл да създам тази таблица само за да се справя със случая на уникалност. Ако този подход няма смисъл, моля, предложете друг. Благодаря!