试图设计一个cassandra数据库表来存储用户的个人资料信息-用户名,姓名,移动的号码和电子邮件ID。username用作群集键,而我希望限制一个用户使用的移动的号码或电子邮件ID不应被另一个用户使用。是否有任何选项来限制每个列的不同值或任何解决方案?试图设计一个具有两个不同的非主要值的模式。Cassandra并不是只在主键上提供DISTINCT。
sd2nnvve1#
你表达了2个不同的查询,它将是2个不同的表。(99%是Cassandra)。您将不得不创建一个专用表来查找移动的。在查找表中,您可以将电子邮件作为聚类键来验证配对。
CREATE TABLE users_profile_by_email( email TEXT, mobile TEXT, username TEXT, PRIMARY KEY((email)) ); CREATE TABLE users_profile_check_mobile( mobile TEXT, email TEXT, PRIMARY KEY((mobile), email) );
插入2个用户(一个批处理语句的良好用法示例)
BEGIN BATCH INSERT INTO users_profile_by_email(email, mobile, username) VALUES ('[email protected]', '111-111-1111', 'user1'); INSERT INTO users_profile_check_mobile(mobile, email) VALUES ('111-111-1111', '[email protected]'); APPLY BATCH; BEGIN BATCH INSERT INTO users_profile_by_email(email, mobile, username) VALUES ('[email protected]', '222-222-2222', 'user2'); INSERT INTO users_profile_check_mobile(mobile, email) VALUES ('222-222-2222', '[email protected]'); APPLY BATCH;
一个用户正在注册.
select count(email) as email_count from users_profile_by_email where email='[email protected]'
select count(mobile) as mobile_count from users_profile_check_mobile where mobile='222-222-2222';
email/mobile
select count(*) as mobile_count from users_profile_check_mobile where mobile='222-222-2222' and email='[email protected]';
1条答案
按热度按时间sd2nnvve1#
你表达了2个不同的查询,它将是2个不同的表。(99%是Cassandra)。
您将不得不创建一个专用表来查找移动的。在查找表中,您可以将电子邮件作为聚类键来验证配对。
插入2个用户(一个批处理语句的良好用法示例)
一个用户正在注册.
email/mobile
有效吗?*