在MySQL中将项目相互关联......比面值更复杂

时间:2016-04-12 16:41:54

标签: mysql sql database relational-database relation

问题

基本上我想在MySQL中存储和查找相关项目,使用以下示例作为参考。

  • 将第2项与第1项相关联
  • 将第3项与第2项相关联
  • 将项目N + 1与项目N ...
  • 相关联

现在由于第3项与第2项和第2项至第1项有关,因此第3项通过菊花链关系与第1项有关。

示例用例是将产品相互关联,有20000种产品,这些产品中的任何一种都可以与任何其他产品相关联。

我想到了2个解决方案。

解决方案1 ​​

Relate Item 2 to Item 1
    - Row 1: Item 2 - Item 1
Related Item 3 to Item 2
    - Row 1: Item 2 - Item 1
    - Row 2: Item 3 - Item 2

优点:

每个项目1个关系,最小行数。

缺点

如果一个项目被删除,它将打破关系链,我可以通过跳过已删除的项目并保持关系完整来解决这个问题。

查询将很繁重,因为它需要跳过每个链(Row)来构建关系列表。

解决方案2

Relate Item 2 to Item 1
    - Row 1: Item 2 - Item 1
    - Row 2: Item 1 - Item 2

Related Item 3 to Item 2
    - Row 1: Item 2 - Item 1
    - Row 2: Item 1 - Item 2
    - Row 3: Item 3 - Item 2
    - Row 4: Item 2 - Item 3
    - Row 5: Item 1 - Item 3
    - Row 6: Item 3 - Item 1

优点:

获取相关项列表的简单查询,因为存在相关项的行条目。

缺点:

首先构建关系需要大量的管理和处理才能插入这些行,并且插入的行数可以快速扩展到很多项目。

除上述两种解决方案外,还有其他解决办法吗?我倾向于除了提出的两个解决方案之外没有任何其他解决方案,我将不得不妥协,希望有人可以证明我错了!

0 个答案:

没有答案