就我而言,每个“项目”要么有属性,要么没有。这些属性可能有数百个,因此我需要每个项目最多 1000 个真/假位。
有没有一种方法可以将这些位存储在项目的一个字段中?
如果您正在寻找一种可搜索的方式来执行此操作,那么不行。
几种可搜索的方法(涉及超过 1 列和/或表):
- 使用一堆SET http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html列。一套中最多只能有 64 个项目(开/关),但您可能会想出一种方法将它们分组。
- 使用 3 个表:Items (id, ...)、FlagNames(id, name) 和数据透视表 ItemFlags(item_id, flag_id)。然后您可以查询项目joins http://dev.mysql.com/doc/refman/5.0/en/join.html.
如果您不需要它可搜索,那么您需要的只是一种在将数据放入数据库之前序列化数据的方法,并在将其拉出时对其进行反序列化,然后使用 char 或 varchar 列。
- 使用您的语言内置的工具(PHP 的序列化/反序列化)。
- 将一系列“y”和“n”字符连接在一起。
- 在调用 MySQL 数据库之前,将您的值在客户端中位打包为字符串(每个字符 8 位),并在从数据库中检索数据时解包它们。这是最有效的存储机制(如果所有行都相同,则使用 char[x],而不是 varchar[x]),但代价是数据不可搜索且代码稍微复杂一些。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)