当前位置: 首页 > 面试题库 >

MySQL:多个表还是一个包含许多列的表?

公孙森
2023-03-14
问题内容

因此,这更多是一个设计问题。

我有一个主键(例如用户的ID),并且有大量与该用户相关联的信息。

我应该根据信息将多个表细分为几类,还是只有一个表包含许多列?

我过去这样做的方法是拥有多个表,例如,一个表用于应用程序使用情况数据,一个表用于配置文件信息,一个表用于后端令牌等,以使事情看起来井井有条。

最近有人告诉我,最好不要那样做,有一个包含很多列的表也可以。关键是,所有这些列都具有相同的主键。

我是数据库设计的新手,所以哪种方法更好,优缺点是什么?

常规的做法是什么?


问题答案:

任何时候信息都是一对一的(每个用户都有一个用户名和密码),那么最好在一个表中使用它,因为它减少了数据库检索结果所需的联接数。我认为某些数据库对每个表的列数有限制,但是在正常情况下我不会担心它,如果需要,您可以随时将其拆分。

如果数据是一对多的(每个用户有成千上万的使用信息行),则应将其拆分为单独的表以减少重复的数据(重复的数据会浪费存储空间,缓存空间,并使数据库难以维护)。

您可能会发现有关数据库规范化的Wikipedia文章很有趣,因为它深入讨论了这样做的原因:

数据库规范化是组织关系数据库的字段和表以最小化冗余和依赖性的过程。规范化通常涉及将大表划分为较小(和较少冗余)的表,并html" target="_blank">定义它们之间的关系。目的是隔离数据,以便可以仅在一个表中进行字段的添加,删除和修改,然后通过定义的关系传播到数据库的其余部分。

还需要注意非规范化,因为在某些情况下重复数据会更好(因为它减少了数据库读取数据时需要做的工作量)。我强烈建议您尽可能使数据规范化,以开始使用,并且只有在您意识到特定查询中的性能问题时才进行规范化。



 类似资料:
  • 问题内容: 说我有以下pandas数据框: 我如何“堆叠”“ b”列中的列表以将其转换为数据框: 问题答案: 更新: 通用矢量化方法-也适用于多列DF: 假设我们有以下DF: 解: 设定: 向量化NumPy方法: 旧答案: 尝试这个: 或@Boud提供的更好的解决方案:

  • 问题内容: 我在MySQL数据库中存储了各种用户详细信息。最初,它是在各种表中设置的,这意味着数据与UserId链接,并通过有时复杂的调用输出,以根据需要显示和操作数据。建立一个新系统,将所有这些表组合成一个大的相关内容表几乎是有意义的。 这会是帮助还是阻碍? 调用,更新或搜索/操作时的速度考虑? 这是我的一些表结构的示例: 用户-用户ID,用户名,电子邮件,加密的密码,注册日期,IP user_

  • 问题内容: 我正在创建一个应用程序,该应用程序的核心功能是随着时间的推移跟踪各种数据(血糖水平,胰岛素剂量,食物摄入量等),并且试图确定如何最好地在数据库中组织这些信息。 从最基本的角度来看,在这个特定总括内的所有内容都是一个事件,因此我想到了一个带有包含所有可能出现的属性的字段的Events表。但是,这可能很麻烦,因为绝大多数字段最终对于许多字段都是空白。但我不确定这是否真的是一个问题。这种方式

  • 问题内容: 我想要一个有两列的表。一栏用于记录的创建时间,另一栏用于记录的修改时间。我希望这些值由数据库处理。我不想让我的应用程序层考虑一下。 我知道,如果您有一个带有或的列,那么您将无法拥有另一个列。您可以使用,但没有办法在触发器之外默认它,据我所知。 我发现您可以具有多个列,方法是将每个列不带或保留,并在创建记录时插入,以使每个列具有当前时间戳。从这一点开始,第一列将自动更新。 这个效果非常好

  • 问题内容: 我正在为具有多个“类型”用户的组织设计数据库。首先,我只创建了一个用户表。但是,尽管所有用户共享一些公共信息(名字,姓氏,用户名,密码等),但是每种用户类型都需要一个或两个其他字段,这些字段不适用于所有用户。尽管我可以创建这些附加字段并将其设置为NULL,但我不希望这样做,因为这些字段是外键,并且对我造成了麻烦。 这种情况通常如何处理? 谢谢! 问题答案: 您的直觉是不创建带有大量NU

  • 问题内容: 我有一个保存名称的数据库,我必须创建一个新列表,该列表将保存诸如ID,名称和性别之类的值,并将其插入当前数据库中。我必须创建一个不在数据库中的名称列表。因此,我只检查了3个名称并尝试使用它们。 我不确定应该创建哪种列表,以及如何循环遍历以正确方式插入所有新值。 到目前为止,这就是我所拥有的: 我对本材料非常陌生,因此将不胜感激。提前致谢! 问题答案: mysql>从测试中选择*; 改编