我做了很多网络应用程序,你要做的第一件事是用一个用户名,密码,名字,电子邮件和所有其他常用的flotsam制作用户表.我当前的项目提出了一种情况,即非用户记录需要与用户类似地运行,但不需要能够成为一阶用户.
是否合理创建第二个表,people_tb
即主关系表和数据存储,并且仅使用users_tb
for authentication进行身份验证?是否分离user_tb
,从people_tb
存在的任何问题?如果这是常见的,那么一些策略和解决方案以及缺点是什么?
这当然是一个好主意,因为您正在规范化数据库.我在我正在编写的应用程序中完成了类似的设计,其中我有一个employee表和一个用户表.用户可能来自外部公司或员工,因此我有单独的表,因为员工始终是用户,但用户可能不是员工.
您将遇到的问题是,无论何时使用用户表,您几乎总是希望person表获取您想要显示的名称或其他常用属性.
从编码的角度来看,如果您使用的是直接SQL,那么精神上解析select语句需要花费更多的精力.如果您使用的是ORM库,可能会有点复杂.我没有足够的经验.
在我的应用程序中,我在Ruby on Rails中编写它,所以我经常做像employee.user.name这样的事情,如果我把它们放在一起,那就是employee.name或user.name.
从性能的角度来看,你要击中两个表而不是一个表,但是给出适当的索引,它应该可以忽略不计.例如,如果你有一个包含主键和人名的索引,那么数据库会点击用户表,然后是人员表的索引(几乎直接命中),所以性能几乎与有一张桌子.
您还可以在数据库中创建一个视图,以使两个表连接在一起,从而为您提供额外的性能增强.我知道在Oracle的更高版本中,如果需要提高性能,甚至可以在视图上放置索引.