繁体   English   中英

数据库设计:1个表还是2个?

[英]Database design: 1 table or 2?

我已经看到了一些数据库设计,其中在帐户表中具有所有用户信息,包括密码,电子邮件,DOB,名字,姓氏等。

我看到其他一些有两个桌子

用户名(或电子邮件),密码,状态(已激活等),组(管理员,所有者,用户等)

nameFirst,nameLast,bestingDay,birthMonth,birthYear等

上述方法的优缺点是什么?

两种设计之间的差异主要是灵活性之一。 如果帐户和用户数据共享一个表,则每个用户必须有一个帐户,并且每个帐户只能有一个用户(除非您添加另一个表以允许除了与该帐户一起生活的用户之外还添加子用户)数据,或者除非您在每个记录中添加具有重复帐户详细信息的新记录,否则这非常糟糕并且与数据库应该做的事情相反)。

使用两个表,您可以轻松地在每个帐户中拥有多个用户,并且还可以选择允许帐户中没有用户或用户没有帐户的情况(如果这样做会有利于您的用例)。

权衡是,如果要执行诸如确定用户帐户(或帐户中的用户)的操作,则在使用两个表时必须进行联接。 如果您有一张表,那么您要做的就是获取该行以获取此信息。

好吧,很明显的主要问题是,如果要从两个表中获取信息,则必须处理两个表。 这可能会使您的查询复杂一些,并可能降低性能。

由于所有这些信息都依赖于一个键字段(此处很可能是用户名),因此我倾向于将其放在一个表中,除了一种非常特殊的情况:例如,如果您想让某人访问表单中的详细信息第一个表而不是第二个表,出于安全性考虑,您可以将其拆分(向所有人开放第一个表,但将第二个表限制为仅需要更多详细信息的人员使用,但我可能会将密码移至第二个表中)这种情况)。

除此之外,只要不妨碍维护第三范式,我就尽量减少对象的数量。

我相信这取决于您数据库设计人员。 只要您将来通过服务器端语言使用它并不难-这是一个可行的解决方案。

我已经在一个表中使用凭据和敏感数据(已加密)设置了数据库,并在另一表中设置了所有其他内容。 我还设置了具有表的数据库,以容纳所有这些数据。

无论哪种方式,都只需要1条查询语句就可以从一个或两个表中获取和/或操作数据。

如果我们要谈论同一“对象”(用户和她的额外信息属于同一个人),则将信息保存在单独的表中是我希望避免的事情。 但是我可以想到将它们分开的两个很好的理由:

  • 如果您已经设计或正在使用具有其自己表的单独身份验证系统,例如User ,但是您需要添加其他信息。 或者,您有一个标准系统,但是用户的信息/字段取决于您的客户端:字段名称,字段数量...然后,您可以使身份验证部分保持标准,而额外的信息部分则很灵活。

  • 如果在数据模型中有复杂的Person/People模型,并包含地址,出生日期和其他信息,则可以选择使用同一表为用户存储该信息。 因此,您的user还将拥有一个person_id或类似名称。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM