Я использую ScyllaDB
, и у меня есть таблица со следующими 5 столбцами:
K1 K2 V1 V2 V3
Где K1
— ключ раздела, K2
— ключ кластеризации, V1..V3
— три столбца, представляющие 3 разных значения в таблице.
Я хочу предотвратить добавление повторяющихся значений в таблицу, где K1, K2, V1 and V2
соответствует существующей записи в таблице. Другими словами, не должно быть возможности добавить/сохранить более одной строки, где ВСЕ 4 столбца в этой строке соответствуют существующей строке с теми же значениями.
Можно ли этого добиться с помощью Scylla?
Спасибо
@NadavHar'El Хорошо, я думаю, вы имеете в виду идею, обсуждавшуюся в Эта статья «Но здесь есть проблема. То, как определена таблица, у каждого питомца может быть записана только одна частота сердечных сокращений. Когда мы записываем следующее значение для тот же самый pet_chip_id, с другим временем, он фактически перезапишет первое значение" Спасибо за ваш вклад!
Самый надежный способ добиться этого — сделать все 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
, поскольку ограничения кластеризации позволяют указывать только префикс ключа кластеризации.
Вы сказали, что (K1, K2) — ваш первичный ключ. Этот уже означает, что у вас может быть только одна запись (строка) с этим конкретным ключом... Так что дело не только в том, что у вас не может быть двух записей с одним и тем же (K1, K2, V1, V2), вы на самом деле не можете есть еще одна запись с тем же (K1, K2). Таким образом, ваше предположение вопрос не подходит друг к другу. Возможно, вы хотите добавить V1 и V2 к своему первичному ключу, как предложил Ботонд в своем ответе.