将所有列保存在一个表中与按数据类别保存在单独的表中

Posted

技术标签:

【中文标题】将所有列保存在一个表中与按数据类别保存在单独的表中【英文标题】:Keeping all columns in a single table vs keeping in separate table by category of data 【发布时间】:2014-03-12 06:09:12 【问题描述】:

我有一个 mysql 表“登录”,其中包含 name、userid、pass、email 列。和另一个表格“信息”,其中包含 bio、skills、searchingfor、badge、likes、age

这里,第一个表用于检查登录...其余的用于存储用户的个人信息。但我有一个搜索框,人们可以根据除生物和通行证以外的所有内容搜索用户。我在连接两个表的结果时遇到问题,可以将所有结果放在一个表中还是有更简单的方法?

如果我将所有内容都放在一个表中,如果数据库获得大量数据,那么 mysql 查询搜索是否会更重?

【问题讨论】:

为什么在加入表格时遇到问题?如果skills 是一个事物列表,那么它不应该是一个单独的列,而应该是一个单独的表格,每个人拥有的每一项技能都有一行。 likes 也是如此。了解数据库规范化,您永远不应该在单列中有一个列表。 我想要,但给我这份工作的人希望将技能保留在列中以逗号分隔值并按 FIND_IN_SET 搜索 【参考方案1】:

如果你合并两个表,你的 mysql 服务器上不会有更高的负载。这是一个有效的想法,因为无论如何您似乎都有 1:1 的关系,因此代码变得更容易。实际上负载会更低,因为您不需要在关系数据库管理系统中实际上非常慢的连接。性能(负载)仅取决于您的索引和过滤器要求,但这与您是在一个表还是两个表中搜索无关。

另一方面:您没有理由不能按要求加入这些表。所以也许你想先在这里解决你的问题。并且只是为了学习如何去做;-)

【讨论】:

谢谢你让我松了一口气:)

以上是关于将所有列保存在一个表中与按数据类别保存在单独的表中的主要内容,如果未能解决你的问题,请参考以下文章

如何将查询结果保存到单独的表中?

使用 cakephp 将复选框保存到单独的表中

在 laravel 中将一些用户信息保存到不同的表中

在jetstream更新表单中更新用户配置文件时,将用户的不同类型数据保存在不同的表中

删除一张表中与另一张表中相同的记录

使用 laravel 将数据保存在 2 个不同的表中