Home >Backend Development >PHP Tutorial >用户表和用户信息表,为什么要分两个表呢,一般都是什么字段呢?
保存用户信息一般用两张表
user
Profile
我想知道一般这两个表存什么呢?
user(id,name,email,^……)
Profile(id,????)
什么内容存到user中呢,什么内容又放到Profile中呢?比如密码用户名之类的放在user中是吧,这个有什么标准没有呢?
或者干脆所有的用一张表就可以嘛
纠结!!!
保存用户信息一般用两张表
user
Profile
我想知道一般这两个表存什么呢?
user(id,name,email,^……)
Profile(id,????)
什么内容存到user中呢,什么内容又放到Profile中呢?比如密码用户名之类的放在user中是吧,这个有什么标准没有呢?
或者干脆所有的用一张表就可以嘛
纠结!!!
是为了将来考虑,这是一个典型的垂直分表的例子。把text等大字段 和不做排序过滤的一些字段 放到副表中。这样的设计能保证数据量增长的时候主表的性能下降不是非常的严重。
在数据库的设计中,还要考虑引擎的优化问题,分表的一个主要目的是加快大数据量时的访问速度,比如index表包括主键idx,帐号密码用户等级这些基本的定长字段,注意是定长,detail表有关联的idx和其他变长的,或blob字段,mysql访问只含定长字段的表速度是最快的
个人理解,user是给登陆系统用的信息表,内容简单,用户名,密码,另一个则是客户单位的人员信息,这里保存用户基本资料,年龄,住址等等,这里的人主要用于系统业务使用,不一定是登陆用户,仅供参考。
根据业务不同设计就好
每张表代表一个主题(subject),有一个主键(primary key),主键在功能上决定其他列,主键唯一确定一条记录。user和profile是同一个东西吗?它们的主键是什么?弄清楚这些你就知道怎么设计了。
人工id是在数据库物理设计后期引入的概念,在逻辑设计过程中只有使用关系主键才能建立合符逻辑的模型。一开始就把表名想好,贴上id的标签,就很难看出数据本身的关系。
因此,首先要弄清需求,需要记录哪些事实,之后再考虑怎样建表。
表?关系?数据库设计?
数据库设计的原则请参考"数据库设计三范式",基本目标就是减少冗余信息。
用户User表和资料Profile表?
这么设计的唯一可能正确的原因就是1个用户会有多份资料。
简单点说好了:
1对1的关系(假定1个用户只有1个邮箱),应该保存在同一个表里(用户表里面的邮箱列)。
1对多或者多对多的关系(假定1个用户可以有N个好友),应该另外建一个关联的表(表里有本用户的ID,好友的ID)。
1个格子只表示一个信息,1个表里的都是唯一相关的东西,尽量不要把信息重复保存在多个表里,这就是标准。
另外,是谁说"保存用户信息一般用两张表"的?
觉得,主要还是为何把不定长的数据拆到另外一个表里面,这个表里面的数据总长度固定,引擎找起来很快
用户表分成两份的情况不是一定的,这要视乎系统业务逻辑,有为了一对多的情况,也有数据库效率的原因,当对数据进行修改的时候就必须进行行级以上 的锁表(视乎引擎)这对于系统经常进行大量访问操作来说是致命的。所以有垂直分割表,把并不常用的信息分割出去这一做法