我是一个相当新的MySQL开发人员,我正在开始一个项目,我可以做一些关于...的初步建议。
我正在创建一个数据库,主要包含一定数量的项目(1-5k之间)和大约40个与每个项目相关联的布尔变量。然后,用户将输入他们对这40个值的选择,系统的工作是确定“最佳”匹配项目。这可能是匹配所有40个变量的项目,如果不存在,则可能是匹配39等的项目。
所以,如果有人有时间的话,有几个问题!
感谢您的时间和帮助!
答案 0 :(得分:3)
一张桌子肯定是对的。您可以将最多64个布尔变量存储到单个BIGINT
列中,作为“掩码”,每位一个布尔值,并将匹配计算得非常快BIT_COUNT(~(the_column ^ user_preferences))
,它将计算多少位相等列和掩码给出了用户的首选项(如果PHP给你操作64位整数的问题,你可以使用两个32位的列,总结两位数仍然非常快)。
答案 1 :(得分:0)
我将使用两张桌子。一个用于项目,一个用于匹配项目的布尔标志。只在'flags'表中输入一个项目的匹配项。 然后,为了得到一个项目的匹配数,只需要在'flags'表中记录与'items'表中的itemId匹配的记录。
答案 2 :(得分:0)
我不认为这是存储此类信息的最佳方法。它可能在视觉上看起来很好,但如果你所有的存储都是布尔值,那么我将创建两个表和一个链接表,每个匹配的真值都带有条目。
这里没有开销,因为mysql更喜欢搜索行而不是列。 count()函数将派上用场。
我很确定如果找不到任何匹配项,您将不得不恢复到PHP以运行搜索以查找39的匹配项等等。递归函数是一种很好的方法。
e.g。
表xOption id,name
表格选项 id,name
表xOption_yOption xOption_id,yOption_id
关于这一点的另一个好处是,您可以稍后在网格中轻松添加更多X或Y选项,您也可以存储有关选项的更多详细信息。
不要忘记使用索引。