仅使用不可预测数量的外键构建多对多数据库模式

时间:2012-06-11 21:31:17

标签: database schema database-schema schema-design

下午好(至少在这里),

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

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

我将问题分成两半,所以我现在有两个一对多的模式。一个解决了,但另一个解决了。

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

表BAR可以涉及FOO的多个键。事先不知道相关密钥的数量。

一个例子:

  1. 从查询FOO返回ids 3,4,5。
  2. BAR需要一个与3,4,5相关的唯一键(尽管可能会返回任意数量的ID)
  3. 通常的联接表不起作用:

    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  |
    

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

1 个答案:

答案 0 :(得分: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,不需要单独的键,除非你真的想要一个,这样可以避免重复的关系。