那天面试有这样的一道题,我今天感觉是应该再补充一下

已经给BOSS发送了过去

问题:设计一个用户登陆的模块,应该包含哪些表,需要记录每次用户登陆的时间,以及需要将100日内没登陆的用户(精确到0点)进行冷冻账号处理.

当时没有太接触过相关类美团类app的用户表设计,所以依旧按照了传统管理程序的用户表设计,
现在稍微追加一下,即:

sys_users: 用户表,用户登陆主要账户密码
user_id(bigint 20) PK
user_name(varchar 255)
user_password(varchar 300)
user_salt(varchar 255)
create_time(date)
update_time(date)
delete_flag(tinyint)


sys_users_info: 用户信息表,通过FK关联sys_users
user_info_id(bigint 20) PK
user_id(bigint 20) FK
user_nickname(varchar 255)
user_truename(varchar 255)
user_email(varchar 255)
user_gas(bigint 20) 
(用户权重,就像汽车要加汽油一样,将结合用户购买会员等级,购买时长来加权使得该值更大,
默认值100,用户注册后,如无会员无等级,每过一天如无登陆-1,不为0登陆后再回到100.
购买会员后则根据月份*等级*100+*默认值100做为该值预先-去的指数,
具体算法可以细细考究.最终用户会员到期后,才开始减默认值100权重.)
user_profile(varchar 255)
...其它用户信息相关,如果地址是有多个,需要追加sys_users_address表
create_time(date)
update_time(date)
delete_flag(tinyint)


sys_users_logs: 该表记录每次用户登陆时间
user_log_id(bigint 20) PK
user_id(bigint 20) FK
user_log_type(tinyint 1) 用户日志类型 0:通用日志 1:每日登陆日志 2:按次登陆日志
login_time(date) 登陆时间
记录了用户每次的登陆时间
login_date(date) 登陆日期 
(有login_date的话,即某日用户登陆后,一是写入log_type1,二是写入log_type2,
而用户于当天再次登陆多次,查看是否已经有了type1,有则只记录每次的type2
同样该值也可以结合job用来发出提醒用户连续几日未登陆请来看看的提示)
记录用户于某一天是否有过登陆
login_ip(varchar 255)
login_device(varchar 255) 用户登陆设备
create_time(date)
update_time(date)
delete_flag(tinyint)


sys_users_room: 该表记录用户临时冷板凳和永久冷藏 (以NBA球员术语来说)
user_room_id(bigint 20) PK
user_id(bigint 20) FK
frozen_code(tinyint 1) 0:默认 1:临时封禁 2:永久封禁 
(根据job任务将user_gas为0的用户加入frozen,而判断到用户user_gas稍微不足时,
如值到了10,7等,可以发出通知,请用户登陆.)
如果记录到
warm_time(date) 临时封禁的解禁时间,以job形式每日更新frozen_code值到0与否
create_time(date)
update_time(date)
delete_flag(tinyint)


sys_users_grade: 用户等级表,记录用户是否购买会员,购买了多久等,其实这个表如果一开始就知道是电商类,
其实加入到users也未尝不可
grade_id(bigint 20) PK
user_id(bigint 20) FK
member_level(tinyint 1) 0:无会员 1:铜牌会员 2:银牌会员 3:金牌会员 4:钻石会员 5:黑卡会员 6:软件股东
member_month(bigint 10) 购买会员的月数
create_time(date)
update_time(date)
delete_flag(tinyint)

posted @ 2021-06-06 14:32  ukyo--君君小时候  阅读(58)  评论(0编辑  收藏  举报