什么时候在主用户表中存储用户设置或信息不好?

时间:2016-10-03 11:42:35

标签: mysql database-design

我仍在扩展和开发我的应用。

我目前有一个包含35列的用户表。我搜索了我的问题,但如果我做对或错,我仍然有点困惑。有人说用户表另外说做关系。

在除了ID,用户名,电子邮件和密码之外的用​​户表中,我还存储每个用户拥有的真实姓名,完整地址,年龄,个人资料图片名称,国家/地区,社交网址,高级帐户(开/关)等

在我的应用程序中,每个用户都有一个配置文件页面,我通过用户名(唯一)查询用户表以查看用户是否存在,如果是,我从User表中获取我想要的内容而不是加入和建立关系表等。

我应该保留原样,还是最好将User表拆分为关系ex。 user_details(生物,图片名称,国家/地区等)和user_settings(高级,电子邮件通知等)?

我与我的应用程序的其他部分有关系,但我似乎无法理解为什么有些人更愿意建立关系表来存储用户所在国家和其他相关信息。任何想法将不胜感激。

2 个答案:

答案 0 :(得分:0)

根据我的经验,你应该将很多那些在连接表中分开(如果你的表有很多记录)。

例如,您应该再添加一个地址信息表和一个联系人信息表(电子邮件,电话,传真等),这样您就可以在这些表中记录用户更改的历史记录,如果您是仅需要来自用户的原始数据(id,用户名,名称),因此您不必从一个表中加载所有数据。

您不需要具有历史记录的其他设置(如活动/非活动,阻止,某些用户首选项),您可以保留在用户表中以便于访问。

答案 1 :(得分:0)

如果每个用户只拥有这些数据项中的一个,那么我认为打破它的唯一原因就是性能。就像你有50k的数据塞进每个用户记录一样,90%的时间你唯一使用的是名称和密码,这可能会减慢对这些记录进行操作的操作。

一般情况下,我认为出于性能原因对数据库进行非规范化是一个坏主意,除非您发现在实际操作中存在性能问题,或者有充分的理由相信会存在性能问题。很多数据库都因为“性能改进”而被严重破解,这些改进是不必要的,或者并没有真正提高性能。

我有时会因人类理解原因而打破纪录,以减少混乱。是的,如果字段较少,则更容易掌握记录中的内容。但是你必须知道还有其他“附加”记录,当你关心它们时如果你必须拖入两个记录。所以一般来说我认为这是一个坏主意,但我不会排除它。