什么时候将主表从主表移到辅助表中是个好主意?

dan*_*dan 7 mysql sql postgresql

说我有这样一张桌子:

  create table users (
   user_id int not null auto_increment,
   username varchar,
   joined_at datetime,
   bio text,
   favorite_color varchar,
   favorite_band varchar
   ....
 );
Run Code Online (Sandbox Code Playgroud)

假设随着时间的推移,越来越多的列 - 例如favorite_animal,favorite_city等 - 被添加到此表中.最终,有20个或更多列.

在这一点上,我觉得我想将列移动到一个单独的 user_profiles表,所以我可以做select * from users而不返回大量通常不相关的列(如favorite_color).当我确实需要通过favorite_color查询时,我可以这样做:

select * from users inner join user_profiles using user_id where
user_profiles.favorite_color = 'red';
Run Code Online (Sandbox Code Playgroud)

将主列表中的列移到"辅助"表中是一个好主意吗?

或者更好地保留表中的所有列users,并始终明确我想要返回的列?例如

select user_id, username, last_logged_in_at, etc. etc. from users;
Run Code Online (Sandbox Code Playgroud)

这涉及哪些性能考虑因素?

ctf*_*ord 6

如果辅助表要包含一组没有概念内聚性的杂项字段,则不要使用辅助表。

如果您可以对多个字段(例如地址表)进行良好的概念分组,请使用单独的表

当然,您的应用程序有其自己的性能和规范化需求,您应该仅在适当考虑您自己的情况的情况下应用此建议。