【发布时间】:2016-05-25 12:10:30
【问题描述】:
我正在构建一个移动应用程序,我使用 PHP 和 MySQL 编写后端 - REST API。
如果我必须将大约 50-60 个布尔值存储在我的移动应用程序中名为“报告”的表中(用户必须在表单中检查内容),我将值 (0/1) 存储在一个简单的数组中。在我的 MySql 表中,我应该为每个布尔值创建一个不同的列,或者如果我只是使用字符串或 Int 将其存储为“110101110110111 ...”之类的“数字”就足够了吗?
我使用 JSON 获取和放置数据。
更新 1:我所要做的就是检查一切是否为 1,如果其中一个为 0,那么这是一个“问题”。 2 年后,该表将有大约 15.000-20.000 行,它必须非常快并且尽可能节省空间。
更新 2:就速度而言,哪种解决方案更快?制作单独的列与将其存储在字符串/二进制类型中。如果我必须检查哪些是 0 怎么办?如果我将它作为“数字”存储在一个列中,如果它不是“111..111”然后将其作为 JSON 发送到移动应用程序,我在其中解析值并在用户设备上分析它,这是一个很好的解决方案吗?假设我必须处理 50K 行。
提前致谢。
【问题讨论】:
-
如果您需要搜索(使用
WHERE bool_a AND NOT bool_b之类的东西)这些标志的值,这会促使您将它们存储在它们自己的列中。但是您还没有告诉我们您的应用程序需要如何使用这些数据。 -
你是对的。我所要做的就是检查一切是否为 1,如果其中一个为 0,那么这是一个“问题”。在 2 年内,该表将有大约 15.000-20.000 行,它必须非常快并且尽可能节省空间。
-
如果您将每个布尔值放在其自己的列中,您的应用程序将需要在每次添加新报告时更改数据库(假设您将添加新报告)。或许您应该考虑以长而窄的格式存储数据(请参阅statmethods.net/management/reshape.html 以查看同一数据集的“宽”与“长”格式)。
-
15-20k 行是什么都没有。如果索引良好,MySQL 可以快速处理数十亿行。
-
我建议您拆分表格并将每个布尔字段存储在单独的字段中。它将更具可读性,并让您免于以后出现问题。不用担心 20 000。我们使用具有 40 到 2 亿条记录的表,而 mysql 可以很好地处理它们。