我正在“密码存储系统”主题领域编写一个测试项目。
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)
);
问题出现在凭证表上,问题是我选择了 user_login、resource_name、resource_login 字段作为主键的一部分,因为它们将保证某个帐户在某个用户的某个资源上的唯一性,我将能够通过帐户的唯一字段进行搜索,但我希望这些数据按created_at降序排序,然后在应用程序中使用分页部分发布它们。我想到的唯一选择是制作两个表而不是一个表,并将它们命名为 credetials_unique &credentials_sorted_by_created_at,credentials_unique 我将用作现在的凭据,即在创建之前检查这样的用户帐户是否已存在,并保证唯一性,在第二个表credentials_sorted_by_created_at中,我将插入相同的所有内容,但已经有 PartitionKey(user_login) 和 ClusteringKey(created_at)
请告诉我,更好的选择,这到底是实践过的,还是一开始就有问题?
与credentials_history类似的故事,理论上我会有表格
用于检查此类帐户是否已存在的表 (这个名字让我很困惑) 凭据_按_资源_名称_和_资源_登录 PK((用户登录), 资源名称, 资源登录)
按排序顺序向用户显示信息的表格。 证书 PK((用户登录), 创建时间)
用于检查该帐户是否已使用该密码的表 密码凭证历史记录 PK((凭据_id),资源_密码)
按排序顺序向用户显示信息的表格。 凭据_历史记录 PK((credential_id),changed_at)
为什么不将
created_at
作为聚类键的一部分,例如,
PRIMARY KEY((user_login), resource_name, resource_login, created_at)