我应该如何在SQL中表示(一个(多个A到多个B)到多个C)关系

时间:2014-09-09 23:51:58

标签: sql

使用以下表示法:

  • A >< B - 许多A和B
  • A <= B - 一个A到多个B

我想代表(A >< B) <= C,即将许多C与A和B之间的每个链接相关联。

这里有一些我曾经有过的想法(警告:伪代码)

  1. 主键对,重复

    table ABMap
        primary foreign A_id
        primary foreign B_id
    
    table C
        primary C_id
        foreign A_id
        foreign B_id
        # more data
    
  2. 对映射的唯一约束

    table ABMap
        primary AB_id
        foreign A_id
        foreign B_id
        unique (A_id, B_id)
    
    table C
        primary C_id
        foreign AB_id
        # more data
    
  3. 映射ID的唯一约束

    table ABMap
        auto_increment AB_id
        primary foreign A_id
        primary foreign B_id
        unique (AB_id)
    
    table C
        primary C_id
        foreign AB_id
    
  4. 我应该使用哪种,为什么?

1 个答案:

答案 0 :(得分:1)

我最喜欢#2。

table ABMap
    primary AB_id
    foreign A_id
    foreign B_id
    unique (A_id, B_id)
    clustered_index (A_id, B_id)   --- Add
    index (A_id)                   --- Add if B not supplied sometimes
    index (B_id)                   --- Add if A not supplied sometimes

table C
    primary C_id
    foreign AB_id
    # more data

使用AB_id的主键将在连接表C时提供快速查找。

但是,如果大多数查询将使用两个父项进行搜索,则使用(A_id,B_id)对数据进行聚簇索引将执行得最快。如果某些查询只提供A或只提供B,那么这两个字段上的单独索引将支持这些查询。

相关问题