Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 仅使用数量不可预测的外键构建多对多db模式_Database_Schema_Database Schema_Schema Design - Fatal编程技术网

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

Database 仅使用数量不可预测的外键构建多对多db模式,database,schema,database-schema,schema-design,Database,Schema,Database Schema,Schema Design,下午好(至少在这里附近) 我有一个多对多关系模式,我很难建立它。主要的问题是我只使用主键和外键(没有用于简化事情的varchar或enum),多对多关系的数量是不可预测的,并且随时都可能增加 我环顾四周,看了各种各样的问题,找不到直接解决这个问题的东西 我将问题一分为二,因此现在有两个一对多模式。一个问题解决了,但另一个问题让我感到不适 让我们假设表FOO是一个标准的、无聊的表,它有一个简单的主键。这是一对多关系中的一对多 表栏可以与FOO的多个键相关。相关钥匙的数量事先不知道 例如: 从查询中

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

我有一个多对多关系模式,我很难建立它。主要的问题是我只使用主键和外键(没有用于简化事情的varchar或enum),多对多关系的数量是不可预测的,并且随时都可能增加

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

我将问题一分为二,因此现在有两个一对多模式。一个问题解决了,但另一个问题让我感到不适

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

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

例如:

  • 从查询中,FOO返回id 3、4、5
  • BAR需要一个与3、4、5相关的唯一密钥(尽管可能返回任意数量的ID)
  • 通常的联接表不起作用:

    Table FOO_BAR
    primary_key  |  foo_id  |  bar_id  |
    
    因为FOO返回3个唯一键,这里bar_id与FOO_id有一对一的关系

    拥有两个连接表似乎也不起作用,因为它仍然无法将foo_id 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  |
    

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

    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\u id、bar\u id,除非您真的需要,否则不需要单独的键,这样可以避免重复关系。

    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,不需要单独的键,除非您确实需要一个,这将避免重复关系