我在学Cassandra。我必须做基本的用户表建模。这就是我所做的。
CREATE KEYSPACE IF NOT EXISTS users
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
CREATE TYPE IF NOT EXISTS users.date_type(
month SMALLINT,
day SMALLINT,
year INT
);
CREATE TYPE IF NOT EXISTS users.phone_type(
code INT,
phone TEXT,
);
-- create user
CREATE TABLE IF NOT EXISTS users.user(
userid TIMEUUID,
name TEXT,
dob FROZEN<date_type>,
username TEXT,
email TEXT,
phone FROZEN<phone_type>,
email_verified BOOLEAN,
phone_verified BOOLEAN,
created_on TIMESTAMP,
PRIMARY KEY (userid)
);
-- get user by username
CREATE TABLE IF NOT EXISTS users.user_by_username(
userid TIMEUUID,
username TEXT,
password TEXT,
PRIMARY KEY (username)
);
-- get user by user phone number
-- can have same number for more than one account
CREATE TABLE IF NOT EXISTS users.user_by_phone(
userid TIMEUUID,
phone FROZEN<phone_type>,
password TEXT,
PRIMARY KEY (phone, userid)
);
-- get user by email
-- can have same email for more than one account
CREATE TABLE IF NOT EXISTS users.user_by_email(
userid TIMEUUID,
email TEXT,
password TEXT,
PRIMARY KEY (email, userid)
);
-- user history
CREATE TABLE IF NOT EXISTS users.user_history(
userid TIMEUUID,
name TEXT,
dob FROZEN<date_type>,
username TEXT,
phone FROZEN<phone_type>,
email TEXT,
phone_verified BOOLEAN,
email_verified BOOLEAN,
action TEXT,
date TIMESTAMP,
PRIMARY KEY (userid, date, action)
);
根据Cassandra数据模型,上表设计是否有效?
为什么?因为如果我想创建一个用户,我必须在5个表中插入
如果我想更新电子邮件、电话或密码,首先我必须删除表中的条目,然后用更新的值插入
1条答案
按热度按时间r7s23pms1#
根据Cassandra数据模型,上表设计是否有效?
是的,这是有效的表设计,根据Cassandra数据建模。
为什么?因为如果我想创建一个用户,我必须在5个表中插入
这就是在cassandra中所做的,首先你有你想要满足的查询,然后根据它们设计你的表。
如果我想更新电子邮件、电话或密码,首先我必须删除表中的条目,然后用更新的值插入
只需更新这些值,不需要先删除它们。但要确保更新每个表中相应的条目。