我正在研究关于收藏品的粉丝,我想建立一个清单,可以帮助我的用户跟踪他们做了什么,没有。至于我目前的设计,我基本上每个数字都有一个布尔值 - 1对于'有它'否则为0。目前大约有250个数字需要考虑,所以我有很多列,每个都会保留一个布尔值,然后在将来我会引入更多列,因为会引入更多数据。然而,我的直觉告诉我,有几百列是不好的形式。
作为一种清理方法,我将整个事物转换为一个长十六进制字符串(每个字符为4位布尔值,或者整个列表的当前长度约为75个字符),然后只是根据需要编码/解码。虽然这肯定会使我的行缩短很多,但它会阻止我为像X-figurine的用户搜索数据库,以防我最终想做的事情。
考虑到所有这些因素,我有几个问题:
像这样的大量布柱会成为一个重要的罪吗?考虑到列基本上保持尽可能小的数据类型,性能影响是否会非常显着?
还有另一种更好的方法可以在数据库中保存这么长的布尔列表吗?
如果我想,而不是布尔,有一个可以代表几个不同状态的数字(即,' Have',' Don' Don' ,并且“想要”给核对清单提供更多功能,这会对我处理这个问题的方式产生怎样的影响?
答案 0 :(得分:1)
考虑到现代数据库系统,您提到的列数和类型可能不会让您遇到太多麻烦。正如大卫指出的那样,this question可能会对此提供一些见解。但是,处理代码中的所有这些列将使其难以维护。
您可以跨三个表拆分数据,而不是使用单个表。一个表列出了数字,另一个表列出了用户,第三个表列出了库存条目。
数字表:
id | figure_name
用户表:
id | user_name
库存表:
id | user_id | figure_id | state
您可以使用FOREIGN KEY
告诉mysql链接表格,并使用JOIN
查询合并后的结果。
这种结构的好处是,你有更多的灵活性。以下是一些例子:
使用上一节中描述的方法,您可以轻松修改state
表的inventory
列。您可以使用BOOL
甚至ENUM
,而不是VARCHAR
。但是,在后一种情况下,您可以添加另一个将states
映射到id
的表state_name
。