net*_*zar 11 php mysql database
我正在构建一个移动应用程序,我使用PHP和MySQL编写后端 - REST API.
如果我必须在我的移动应用程序中将名为"Reports"(用户必须检查表单中的内容)的表中存储大约50-60个布尔值,我将值(0/1)存储在一个简单数组中.在我的MySql表中,我应该为每个布尔值创建一个不同的列,或者如果我只是使用字符串或Int将其存储为"数字",如"110101110110111 ..."就足够了吗?
我用JSON获取数据.
更新1:我所要做的就是检查一切是否为1,如果其中一个为0那么这就是"问题".在2年内,该表将具有大约15.000-20.000行,它必须非常快并且尽可能节省空间.
更新2:在速度方面哪个解决方案更快?制作单独的列并将其存储为字符串/二进制类型.如果我必须检查哪些是0,该怎么办?如果我将它作为"数字"存储在一列中并且它不是"111..111"然后将其作为JSON发送到移动应用程序,我解析该值并在用户的设备上进行分析,这是一个很好的解决方案吗?假设我必须处理50K行.
提前致谢.
O. *_*nes 13
在搜索时,每个值的单独列更灵活.
如果不同的行具有不同的布尔值集合,则单独的键/值表更灵活.
而如果
然后使用像'1001010010'等文本字符串是存储它们的好方法.你可以这样搜索
WHERE flags <> '11111111'
Run Code Online (Sandbox Code Playgroud)
找到你需要的行.
您可以使用每个标志一位的BINARY列.但是,如果您使用文本,您的表格将更容易用于临时查询和眼球检查.在您开始存储数百万行之前,使用BINARY而不是CHAR节省的空间将不会很大.
编辑必须要说的是:每当我使用布尔属性数组构建这样的东西时,我后来对它的灵活性感到失望.例如,假设它是一个灯泡目录.在千禧年之际,布尔标志可能就像是
screw base
halogen
mercury vapor
low voltage
Run Code Online (Sandbox Code Playgroud)
然后,事情发生了变化,我发现自己需要更多的布尔标志,比如
LED
CFL
dimmable
Energy Star
Run Code Online (Sandbox Code Playgroud)
突然间,我的数据类型不足以容纳我需要它们持有的东西.当我写"你的布尔值列表或多或少是静态的"时,我的意思是你没有合理地期望在应用程序的生命周期中有类似灯泡特性的变化.
因此,单独的属性表可能是更好的解决方案.它会有这些列:
item_id fk to item table -- pk
attribute_id attribute identifier -- pk
attribute_value
Run Code Online (Sandbox Code Playgroud)
这最终是灵活的.你可以添加新的标志.您可以在应用程序的生命周期中随时将它们添加到现有项目或新项目中.而且,每个项目都不需要相同的标志集合.你可以写出"哪些项目有任何虚假属性?" 像这样的查询:
SELECT DISTINCT item_id FROM attribute_table WHERE attribute_value = 0
Run Code Online (Sandbox Code Playgroud)
但是,你必须要小心,因为查询"哪些项目缺少属性"是很难写的.
Pau*_*gel 11
出于特定目的,当任何零标志是一个问题(例外)并且大多数条目(如99%)将是"1111 ... 1111"时,我没有看到任何理由将它们全部存储起来.我宁愿创建一个单独的表,只存储未经检查的标志.该表可能如下所示:uncheked_flags(user_id,flag_id).在另一个表中,存储标志定义:flags(flag_id,flag_name,flag_description).
然后你的报告就像SELECT * FROM unchecked_flags.
更新 - 可能的表定义:
CREATE TABLE `flags` (
`flag_id` TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
`flag_name` VARCHAR(63) NOT NULL,
`flag_description` TEXT NOT NULL,
PRIMARY KEY (`flag_id`),
UNIQUE INDEX `flag_name` (`flag_name`)
) ENGINE=InnoDB;
CREATE TABLE `uncheked_flags` (
`user_id` MEDIUMINT(8) UNSIGNED NOT NULL,
`flag_id` TINYINT(3) UNSIGNED NOT NULL,
PRIMARY KEY (`user_id`, `flag_id`),
INDEX `flag_id` (`flag_id`),
CONSTRAINT `FK_uncheked_flags_flags` FOREIGN KEY (`flag_id`) REFERENCES `flags` (`flag_id`),
CONSTRAINT `FK_uncheked_flags_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |