ScyllaDB: предотвращение дублирования записей в определенных столбцах

Я использую ScyllaDB, и у меня есть таблица со следующими 5 столбцами:

K1 K2 V1 V2 V3

Где K1 — ключ раздела, K2 — ключ кластеризации, V1..V3 — три столбца, представляющие 3 разных значения в таблице.

Я хочу предотвратить добавление повторяющихся значений в таблицу, где K1, K2, V1 and V2 соответствует существующей записи в таблице. Другими словами, не должно быть возможности добавить/сохранить более одной строки, где ВСЕ 4 столбца в этой строке соответствуют существующей строке с теми же значениями.

Можно ли этого добиться с помощью Scylla?

Спасибо

Вы сказали, что (K1, K2) — ваш первичный ключ. Этот уже означает, что у вас может быть только одна запись (строка) с этим конкретным ключом... Так что дело не только в том, что у вас не может быть двух записей с одним и тем же (K1, K2, V1, V2), вы на самом деле не можете есть еще одна запись с тем же (K1, K2). Таким образом, ваше предположение вопрос не подходит друг к другу. Возможно, вы хотите добавить V1 и V2 к своему первичному ключу, как предложил Ботонд в своем ответе.

Nadav Har'El 07.05.2022 12:43

@NadavHar'El Хорошо, я думаю, вы имеете в виду идею, обсуждавшуюся в Эта статья «Но здесь есть проблема. То, как определена таблица, у каждого питомца может быть записана только одна частота сердечных сокращений. Когда мы записываем следующее значение для тот же самый pet_chip_id, с другим временем, он фактически перезапишет первое значение" Спасибо за ваш вклад!

S.O.S 09.05.2022 23:04
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
1
2
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Самый надежный способ добиться этого — сделать все 4 этих столбца частью первичного ключа таблицы. Ключи, естественно, дедуплицируются или, лучше сказать, новая запись со значением ключа просто перезапишет старое значение с указанным ключом. Вы упоминаете, что текущая схема выглядит примерно так (для простоты предполагается, что текст является типом):

CREATE TABLE ks.tbl (
    K1 text,
    K2 text,
    V1 text,
    V2 text,
    V3 text,
    PRIMARY KEY(K1, K2)
);

Вы можете изменить свой первичный ключ следующим образом: PRIMARY KEY(K1, (K2, V1, V2)). Вы по-прежнему сможете выполнять запросы только на основе K1 и K2, поскольку ограничения кластеризации позволяют указывать только префикс ключа кластеризации.

Другие вопросы по теме