MySQL:多张表还是一张多列的表?

标签 mysql database-design

所以这更像是一个设计问题。

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

我应该根据信息将多张表格分为几类,还是应该只有一张多列的表格?

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

最近有人告诉我,最好不要那样做,而且有一张有很多列的表就可以了。问题是,所有这些列都有相同的主键。

我对数据库设计很陌生,那么哪种方法更好,优缺点是什么?

传统的做法是什么?

最佳答案

任何时候信息都是一对一的(每个用户都有一个名称和密码),那么最好有一个表,因为它减少了数据库检索结果所需的连接数。我觉得有些数据库对每张表的列数是有限制的,不过一般情况下我是不会担心的,以后有需要可以拆分。

如果数据是一对多的(每个用户都有上千行的使用信息),那么应该拆分成单独的表来减少重复数据(重复数据浪费存储空间、缓存空间,并使数据库更难维护)。

您可以在 database normalization 上找到 Wikipedia 文章有趣,因为它深入讨论了其中的原因:

Database normalization is the process of organizing the fields and tables of a relational database to minimize redundancy and dependency. Normalization usually involves dividing large tables into smaller (and less redundant) tables and defining relationships between them. The objective is to isolate data so that additions, deletions, and modifications of a field can be made in just one table and then propagated through the rest of the database via the defined relationships.

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

关于MySQL:多张表还是一张多列的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9774715/

相关文章:

python - 优化数据上传(MySQL、Python)

php - WordPress SQL 将字符串插入自定义字段

mysql - 如何处理必要的重复条目

database-design - 帮助设计披萨店的数据库架构

sql-server - 数据库设计题。用于删除的 BIT 列

php - MYSQL JOIN 多个表不返回结果

php - 如何在Joomla 3中获取离线用户列表?

ios - 核心数据模型设计——属性与实体

mysql - 我应该规范化(合并)两个相似但不相同的表还是将它们分开?

mysql - 创建触发器与 View