如何在数据库

时间:2018-05-03 01:44:36

标签: mysql sql

我需要在MySql DB上存储一些清单。它证明比预期更棘手:

  • 有一个"主人"适用于所有内容的清单
  • 每个端口都会参考主要清单,但在特定位置撒上额外的物品

我最初的想法是拥有一个包含字段的checklists表:

  • ID
  • 描述
  • portId(如果它是" general"清单中的项目,则为null)
  • 位置

在这里,"主人"清单将是" portId"设置为null,特定于端口的清单将是portId设置为某些内容的清单。 然而,订购事物充其量是棘手的:"位置"参数是不明确的,因为它可能引用特定于端口的列表的位置,但重新排序" main" (非端口)项目会使事情变得非常糟糕。

另一个选项是链接列表:

  • ID
  • 描述
  • portId(如果它是" general"清单中的项目,则为null)
  • previousId

这意味着每个项目都会知道"父母"是。 这似乎是一个完美的解决方案。但是...查询时出现问题:如何编写查询以便项目按正确的顺序出现? (也就是说,首先是没有任何id的那个,然后是第一个以第一个记录为父亲的项目,依此类推)。此外,如果出现任何问题,我担心会破坏链接列表。

是否有"最佳做法"对于这样的问题?

1 个答案:

答案 0 :(得分:0)

答案很简单,令人尴尬。 我从错误的角度接近问题,然后卡住了。 而不是将问题视为"单独的清单然后合并",它更容易将其视为"一个大的清单,其中的项目可能被过滤掉"。

这样,我可以简单地应用通常的每个字段一个权重来定义记录'为了" (因为当你有一套有序的套装时总是这样做);然后,我会简单地过滤掉#34;一些不适用的领域。过滤可以通过多种方式进行,但这超出了我的问题的范围。

从正确的角度来看,问题变得非常简单明了。