所以这更像是一个设计问题.
我有一个主键(比如用户的ID),我有大量与该用户相关的信息.
我应该根据信息将多个表分为多个类别,还是应该只有一个表包含多个列?
我过go 的做法是有多个表,比如说,一个用于应用程序使用数据的表,一个用于配置文件信息的表,一个用于后端令牌的表等等,以使事情看起来井然有序.
最近有人告诉我,最好不要这样做,有一个有很多列的表也可以.问题是,所有这些列都有相同的主键.
我对数据库设计非常陌生,那么哪种方法更好,利弊如何?
传统的做法是什么?
所以这更像是一个设计问题.
我有一个主键(比如用户的ID),我有大量与该用户相关的信息.
我应该根据信息将多个表分为多个类别,还是应该只有一个表包含多个列?
我过go 的做法是有多个表,比如说,一个用于应用程序使用数据的表,一个用于配置文件信息的表,一个用于后端令牌的表等等,以使事情看起来井然有序.
最近有人告诉我,最好不要这样做,有一个有很多列的表也可以.问题是,所有这些列都有相同的主键.
我对数据库设计非常陌生,那么哪种方法更好,利弊如何?
传统的做法是什么?
任何时候,信息都是一对一的(每个用户都有一个名称和密码),那么最好将其放在一个表中,因为这样可以减少数据库检索结果所需的连接数.我认为有些数据库对每个表的列数有限制,但在正常情况下我不会担心,如果需要的话,您可以随时在以后拆分它.
如果数据是一对多(每个用户有数千行使用信息),那么应该将其拆分为单独的表,以减少重复数据(重复数据浪费存储空间、缓存空间,并使数据库更难维护).
你可能会发现维基百科关于database normalization的文章很有趣,因为它深入地讨论了原因:
数据库规范化是组织关系数据库的字段和表以最小化冗余和依赖性的过程.规范化通常涉及将大型表划分为较小(且冗余较少)的表,并定义它们之间的关系.其目的是隔离数据,以便在一个表中添加、删除和修改字段,然后通过定义的关系传播到数据库的其余部分.
Denormalization还需要注意,因为在某些情况下,重复数据更好(因为它减少了数据库在读取数据时需要做的工作量).我强烈建议您从一开始就尽可能规范化数据,并且只有在您意识到特定查询中的性能问题时才进行非规范化.