Это скорее вопрос моделирования данных, но он связан с облегченными транзакциями, потому что кажется, что попытка использовать эту функцию влияет на то, как я моделирую свои данные.
Мой конкретный вариант использования заключается в том, что я хочу обеспечить уникальность определенных полей в 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
? Затем я попытался бы написать в эту таблицу и посмотреть на результат операции. Если запись завершится успешно, я продолжу и заполню все остальные связанные таблицы.
Я знаю, что денормализация — это факт жизни с Кассандрой; Я просто хочу убедиться, что здесь имеет смысл создать эту таблицу только для обработки случая уникальности. Если этот подход не имеет смысла, пожалуйста, предложите другой. Спасибо!