我有两种类型的人在我的网站上,用户和来宾。实际上它们是相同的,除了创建/认证过程。数据库设计:用户和来宾
目前我有两个表:
t_users
userId[PRIMARY, AUTOINC] username[UNIQUE]
t_guests
guestId[PRIMARY, AUTOINC] userId
当有人进入现场,脚本执行以下操作:
1)通过插入新行创建新的客户记录t_guests
2)使用上一步生成的guestId(guest用户名=“Guest guestId”)向t_users添加新记录
3)更新guest记录设置u serId在第2步分配
我觉得这个数据库设计太糟糕了,因为它包含很多漏洞。例如,如果用户名“Guest xyz”已经存在于t_users表中,则步骤2将失败,并且步骤3将向userId分配错误值(取决于实施方式,它将为0或guestId,在步骤1中分配)。
其实我只需要t_guests表的自动增量功能来为客人生成唯一的用户名。有没有办法只使用一个统一表并使用单个查询注册客人?
更新:我可以做下面的插入位客人在单个表:
SELECT @mg := IFNULL(MAX(guestId), 0) + 1 FROM t_users;
INSERT INTO t_users (guestId) VALUES(@mg);
但我不能肯定,没有人插入一个新的客人纪录t_users这两个的执行之间声明。而且我不能让guestId独一无二,因为真正的用户会将它等于零。
为什么不在你的用户表中添加一个'type'列并指定你的用户类型('user','guest','admin'等)? – Blender
“类型”列是一个选项,但它不能解决命名问题。我希望客人被命名为客人1,客人2,客人3等。 –