我正在写一个测试项目的主题领域“密码存储系统”。
create table users
(
login text primary key,
access_token text,
access_token_expire timestamp,
password text
);
create table credentials
(
user_login text,
resource_name text,
resource_login text,
changed_at timestamp,
created_at timestamp,
id uuid,
password_security_level int,
resource_password text,
primary key (user_login, resource_name, resource_login)
)
create table credentials_history
(
credential_id uuid,
resource_password text,
changed_at timestamp,
primary key (credential_id, changed_at)
);
credentials表出现了问题,问题是我选择了user_login,resource_name,resource_login字段作为主键的一部分,因为它们将保证某个用户在某个资源上的某个帐户的唯一性,我将能够通过帐户的唯一字段进行搜索,但我希望这些数据以降序排列created_at,然后在应用程序中使用分页将它们分部分发布。我想到的唯一选择是制作两个表而不是一个表,并将它们命名为credentials_unique & credentials_sorted_by_created_at,credentials_unique我将用作现在的凭据,即,在创建之前检查这样的用户帐户是否已经存在,并保证唯一性,在第二个表credentials_sorted_by_created_at中我将插入相同的内容,但是已经有了PartitionKey(user_login)和PartitioningKey(created_at)
请告诉我,更好的选择,这是在所有实践,还是有一个问题,在一开始?
一个类似的故事与credentials_history,在理论上我将然后有表
用于检查此类帐户是否已存在的表(名称混淆了我)credentials_by_resource_name_and_resource_login PK((user_login),resource_name,resource_login)
表以按排序顺序向用户显示信息。凭据PK((user_login),created_at)
用于检查此类密码是否已在此类帐户上使用的表credentials_history_by_password PK((credential_id),resource_password)
用于按排序顺序向用户显示信息的表。credentials_history PK((credential_id),changed_at)
1条答案
按热度按时间yshpjwxd1#
如果您认为
created_at
可以保证/增强该表中记录的唯一性,则可以将created_at
作为集群键的一部分,如下所示,字符串
另一种方法是创建一个实体化视图,如下所示:
型
MV看起来就像
型
你只需要写入源表,
型
从源阅读:
型
现在,从MV中阅读:
型
这将像下面这样工作,即使你的源表有
d
和null
值:型
正如您所看到的,它自动按
d
降序排序,正如我们在模式创建阶段所述。在使用the guides on MV usage之前一定要阅读它。我也鼓励你利用this free browser-based data modeling by example course来增强你对CQL数据建模的知识和理解。