在MySQL中存储/更新基于比较的数据

在MySQL中存储/更新基于比较的数据,mysql,database-design,comparison,Mysql,Database Design,Comparison,我想在mysql表中存储项目之间的比较。例如,我有以下三项: id:1,名称:项目A,比较核心:1 id:2,名称:B项,比较核心:2 id:3,名称:C项,比较核心:3 这意味着在比较时,比较核心越大的项目越好。但是,当我想向表中插入一个新项时,该方法失败,该项比a项好,比B项差,比如D项。因此,我可以执行以下操作,因为我不必只存储整数: id:1,名称:项目A,比较核心:1 id:2,名称:B项,比较核心:2 id:3,名称:C项,比较核心:3 id:4,名称:D项,比较核心:1.5

我想在mysql表中存储项目之间的比较。例如,我有以下三项:

  • id:1,名称:项目A,比较核心:1
  • id:2,名称:B项,比较核心:2
  • id:3,名称:C项,比较核心:3
这意味着在比较时,比较核心越大的项目越好。但是,当我想向表中插入一个新项时,该方法失败,该项比a项好,比B项差,比如D项。因此,我可以执行以下操作,因为我不必只存储整数:

  • id:1,名称:项目A,比较核心:1
  • id:2,名称:B项,比较核心:2
  • id:3,名称:C项,比较核心:3
  • id:4,名称:D项,比较核心:1.5
最糟糕的是,由于我们无法知道要添加的新项目的数量,因此没有足够的数量用于此目的。例如,通过将范围除以2,结果可以是:

  • id:1,名称:项目A,比较核心:1
  • id:2,名称:B项,比较核心:2
  • id:3,名称:C项,比较核心:3
  • id:4,名称:D项,比较核心:1.5
  • id:5,名称:E项,比较核心:1.75
  • id:6,名称:F项,比较核心:1.875
  • id:7,名称:G项,比较核心:1.9375
  • id:8,名称:H项,比较核心:1.96875
如果项目Z比项目A好,但比项目H差,则Z不能在1.9999到1.9999之间取值。。。二,

那么问题是,我还可以使用什么方法来存储MySQL数据中项目之间的比较数据


当用户询问a项或D项哪个更好时,我应该能够通过查看该表来回答。

而不是从比较分数1、2、3开始;给出更大的整数值,如10000、20000、30000。然后你有一些空间可以在中间插入值。 要回答上一个问题,当您尝试在12384和12385之间插入比较分数时,您必须首先对所有比较分数重新编号,以便您可以放置最新的比较分数


这些数字仅对排序有意义,因此您可以随时更改它们。

如果存储的是排名而不是分数,会怎么样?类似于“b+h-”的东西来表明它比b好,比h差?然后在进行查询时建立分数?我想做的事情如下:一个用户来询问哪一个更好,项目A还是项目G?我能做点什么吗?“如果Z项比A项好,比H项差,那么Z值不能在1.9999…和2之间。”-我不明白,Z值不应该在1和1.96875之间吗?最多可以达到65位,这将使您有足够的机会在现有行之间插入新行。如果您发现自己的新行没有“空间”,只需“移动”挡道的行(通过更新它们的
comparisonscore
)。您甚至可以使用按字典顺序排列的字符串而不是数字。除此之外,您总是可以模拟链表,但这会使某些类型的查询变得笨拙和低效。谢谢,这是我将实现的方法。