在普通用户表"user"(user_id/user_email/user_pwd/etc)旁边,存储配置文件信息的最佳方法是什么?
是否只需将字段添加到用户表中,如"user"
(user_id/user_email/user_pwd/user_firstname/user_lastname/user_views/etc)
或者创建另一个名为"profiles"的表
(profile_id/user_id/user_firstname/user_lastname/user_views/etc)
或者会去一个带有属性定义的表和另一个表来存储这些值?
我知道最后一个是最灵活的,因为您可以轻松添加和删除字段.但对于一个大型网站(5万用户),这会快吗?
您的方法需要考虑的事项
在用户表中存储用户配置文件
这在获取配置文件数据方面通常是最快的方法,尽管这里可能有很多冗余数据(列中可能没有任何信息).
快速(特别是如果您只从数据库中提取所需的列)
浪费数据
更难以使用/维护(可以使用PHPMyAdmin等接口)
在User_Profile中存储用户配置文件表1-1与用户的关系
如果没有创建用户配置文件,除非用户填写用户配置文件,否则您可能仍然可以非常快速地进行连接.
更容易使用
由于加入(或第二次查询)而变得如此轻微
将用户配置文件存储为表中的属性和值
*即存储可能选项的表,存储user_id的表,option_id和值*
没有存储冗余数据,所有数据都是相关的
最常规化的方法
检索和更新数据的速度较慢
我的印象是,大多数网站使用第二种方法并将配置文件信息存储在第二个表中,对于大多数较大的网站来说,它通常会使数据库(twitter,facebook)去标准化,从而以较慢的写入性能为代价实现更高的读取性能.
我认为,当您查看50,000条记录时,将配置文件信息保存在第二个表中可能是最佳选择.为了获得最佳性能,您希望保持与读取的数据严重分离的数据,以确保缓存可以有效工作.
具有属性定义的表不是一个好主意.我建议使用三个表来存储数据:
user(id,login,email,pwd, is_banned, expired, ...) -- rarely changed, keep small, extremaly fast search, easy to cache, admin data profile(id, user_id, firstname,lastname, hobby,description, motto) --data often changed by user,... user_stats(id,user_id,last_login,first_login,post_counter, visit_counter, comment_counter) --counters are very often updated, dml invalidate cache
存储授权和身份验证数据的更好方法是LDAP.
你需要超过3个表.他将如何存储多个电子邮件,多个地址,多个教育历史,多个"寻找"关系等数据.每个人都需要自己的行,假设许多值将被查找,如城市,性别偏好,学校名称等,所以要么正常化它完全或走在noSQL路线上,没有任何意义悬挂在中间,你将失去两个世界的最佳.
你可以复制行,但它不会很好.社交网络不适合50,000个用户.要么你会成功并拥有数百万用户,否则你会崩溃并抓住它,因为运行这些你需要$$$,只有你有一个坚实的用户群才会来.只有50,000名终身用户投资者不会投资,广告收入不会支付成本,您将关闭它.所以设计它就像你想从第一天就成为下一个facebook.想想大!