1

下午好(至少在这附近),

我有一个多对多关系模式,但在构建时遇到了麻烦。主要问题是我只使用主键和外键(没有 varchars 或枚举来简化事情),并且多对多关系的数量是不可预测的,并且可以随时增加。

我环顾了各种问题,找不到直接解决这个问题的东西。

我把问题分成两半,所以我现在有两个一对多的模式。一个解决了,但另一个让我很不舒服。

让我们假设表 FOO 是一个标准的、无聊的表,它有一个简单的主键。它是一对多关系中的一个。

表 BAR 可以与 FOO 的多个键相关。事先不知道相关键的数量。

一个例子:

  1. 从查询 FOO 返回 ids 3、4、5。
  2. BAR 需要一个与 3、4、5 相关的唯一键(尽管可能返回任意数量的 id)

通常的连接表不起作用:

Table FOO_BAR
primary_key  |  foo_id  |  bar_id  |

由于 FOO 返回 3 个唯一键,并且此处 bar_id 与 foo_id 具有一对一的关系。

拥有两个连接表似乎也不起作用,因为它仍然无法将 foo_ids 3、4、5 映射到单个 bar_id。

Table FOO_TO_BAR
primary_key  |  foo_id  |  bar_to_foo_id  |

Table BAR_TO_FOO
primary_key  |  foo_to_bar_id  |  bar_id  |

我究竟做错了什么?我让事情变得比他们更复杂吗?我应该如何处理这个问题?非常感谢您的帮助。

4

1 回答 1

1

FOO-BAR 对我来说看起来不错。你为什么不认为这行得通?

Say FOO = 1,2,3
Say BAR = A,B,C

Then an everything to everything relation will look like:
FOOBAR = 1, A; 1, B; 1, C; 2, A; 2, B; 2, C; 3, A; 3, B; 3, C

您可以使主键 foo_id、bar_id 不需要单独的键,除非您真的想要一个,这样可以避免重复关系。

于 2012-09-22T09:36:17.403 回答