一尘不染

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

mysql

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

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

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

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

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

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

常规的做法是什么?


阅读 348

收藏
2020-05-17

共1个答案

一尘不染

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

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

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

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

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

2020-05-17