首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是最佳实践?新列还是新表?

什么是最佳实践?新列还是新表?
EN

Stack Overflow用户
提问于 2018-07-11 11:20:39
回答 2查看 375关注 0票数 1

我有一个用户表,它包含许多属性,如电子邮件、用户名、密码、电话等。

我想保存一种新类型的数据(整数),让我们称之为“超级大国”,但只有极少数用户会拥有它。users表包含10K+记录,而只有不到10个用户拥有超能力(对于所有其他用户来说,它将为null)。

因此,我的问题是,下列哪一种选择在性能方面更正确和更好:

  1. 在users表中添加另一列,称为“超能力”,它对几乎所有用户都是空的。
  2. 有一个新的表调用users_superpower,它最多包含10条记录,并将用户映射到超级能力。

有些事我想过了:

第一种选择似乎浪费了空间,但实际上它只是一个诱饵.

第二个选项是每次我查询用户时都需要一个左连接.

如果“超级大国”数据是5列的话,答案会改变吗?

注意:我使用hibenate和mysql,如果它改变了答案

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-11 11:23:48

这可能是一个意见问题。我对此的看法如下:

如果superpower是用户的属性,并且不习惯添加属性,那么应该将其作为列添加。10,000*4字节并不是很大的开销。

如果superpower只是一个属性,您可以添加其他属性,那么我建议使用JSON或另一个EAV表来存储值。

如果superpower实际上是一种具有其他属性和日期等的新用户类型,那么创建另一个表。在这个表中,主键可以是user_id,这使得表之间的连接更加高效。

票数 4
EN

Stack Overflow用户

发布于 2018-07-11 11:26:54

我只需要在您的用户实体中添加一个新的布尔字段,以跟踪该用户是否拥有超能力。

请注意,添加一个新表并链接它需要在当前用户表中创建一个外键,此键将是占用空间的另一列。所以它并不能避免存储。如果您只想要一个非常小的列来存储用户是否具有超能力,则可以使用boolean变量,该变量将映射到MySQL BIT(1)列。因为这是一个固定宽度的列,所以NULL值仍然占用一小部分空间,但与表的其他部分相比,这并不是一个很大的存储问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51284184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档