当前位置:  开发笔记 > 编程语言 > 正文

MYSQL:用户 - 配置文件详细信息表设置 - 最佳实践

如何解决《MYSQL:用户-配置文件详细信息表设置-最佳实践》经验,为你挑选了3个好方法。

在普通用户表"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万用户),这会快吗?



1> neopickaze..:

您的方法需要考虑的事项

在用户表中存储用户配置文件

这在获取配置文件数据方面通常是最快的方法,尽管这里可能有很多冗余数据(列中可能没有任何信息).

快速(特别是如果您只从数据库中提取所需的列)

浪费数据

更难以使用/维护(可以使用PHPMyAdmin等接口)

在User_Profile中存储用户配置文件表1-1与用户的关系

如果没有创建用户配置文件,除非用户填写用户配置文件,否则您可能仍然可以非常快速地进行连接.

更容易使用

由于加入(或第二次查询)而变得如此轻微

将用户配置文件存储为表中的属性和值

*即存储可能选项的表,存储user_id的表,option_id和值*

没有存储冗余数据,所有数据都是相关的

最常规化的方法

检索和更新数据的速度较慢

我的印象是,大多数网站使用第二种方法并将配置文件信息存储在第二个表中,对于大多数较大的网站来说,它通常会使数据库(twitter,facebook)去标准化,从而以较慢的写入性能为代价实现更高的读取性能.

我认为,当您查看50,000条记录时,将配置文件信息保存在第二个表中可能是最佳选择.为了获得最佳性能,您希望保持与读取的数据严重分离的数据,以确保缓存可以有效工作.



2> baklarz2048..:

具有属性定义的表不是一个好主意.我建议使用三个表来存储数据:

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> 小智..:

你需要超过3个表.他将如何存储多个电子邮件,多个地址,多个教育历史,多个"寻找"关系等数据.每个人都需要自己的行,假设许多值将被查找,如城市,性别偏好,学校名称等,所以要么正常化它完全或走在noSQL路线上,没有任何意义悬挂在中间,你将失去两个世界的最佳.

你可以复制行,但它不会很好.社交网络不适合50,000个用户.要么你会成功并拥有数百万用户,否则你会崩溃并抓住它,因为运行这些你需要$$$,只有你有一个坚实的用户群才会来.只有50,000名终身用户投资者不会投资,广告收入不会支付成本,您将关闭它.所以设计它就像你想从第一天就成为下一个facebook.想想大!

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有