我正在做一个关于收藏数字的爱好者,我想要建立一个清单,可以帮助我的用户跟踪他们做的和没有的。根据我目前的设计,基本上每个数字都有一个布尔值--1表示“for it”,而0表示“it”。目前大约有250个数字需要解释,所以我会有那么多列,每个列都有一个布尔值,然后在将来,随着更多的数字被引入,我会选择更多的列。然而,我的直觉告诉我,有几百列是糟糕的形式。
作为清理事物的一种方法,我想把整个事情转换成一个长的十六进制字符串(每个字符有4位布尔值,或者整个列表的当前长度大约是75个字符),然后根据需要对其进行编码/解码。虽然这肯定会使我的行更短,但它会阻止我做一些事情,比如搜索数据库中有X雕像的用户,以防这是我最终想要做的事情。
考虑到所有这些,我有几个问题:
发布于 2014-10-15 17:02:45
1.栏数
考虑到现代数据库系统,拥有您所提到的列的数量和类型可能不会给您带来太大的麻烦。正如大卫所指出的,this question可能会在这方面提供一些见解。但是,处理代码中的所有这些列将使其难以维护。
2.另一种方式
与使用单个表不同,您可以将数据拆分到三个表中。一个表列出了数字,另一个表列出了用户,第三个表列出了库存条目。
图表:
id | figure_name用户表:
id | user_name盘存表:
id | user_id | figure_id | state您可以告诉mysql使用FOREIGN KEY链接表,并使用JOIN查询组合结果。
这种结构的好处是,您有更多的灵活性。以下是几个例子:
3.新增国家
使用上述一节中描述的方法,您可以轻松地修改state表的inventory列。您可以使用一个BOOL,而不是一个ENUM,甚至是VARCHAR。但是,在后一种情况下,您可以添加另一个表states,它将id映射为state_name。
https://stackoverflow.com/questions/26387525
复制相似问题