代码之家  ›  专栏  ›  技术社区  ›  zeroef

SQL表设计帮助

  •  3
  • zeroef  · 技术社区  · 16 年前

    我接管了一个有SQL后端的应用程序。有多个表,但我关心的两个是:

    QAProfile
    ---------
    ProfileID <pk> -int
    ProfileName
    SecurityGroups -varchar(max)
    
    
    SecurityGroups
    --------------
    GroupID <pk> -int
    GroupName
    

    我的问题是,securitygroups字段是以逗号分隔的groupid值列表。

    所以配置文件表如下所示:

    -------------------------------------------- 
    | ProfileID | ProfileName | SecurityGroups | 
    -------------------------------------------- 
    |    1      |     foo     |  ,1,13,34,56,  | 
    -------------------------------------------- 
    |    2      |     bar     |  ,4,13,29,56,  | 
    -------------------------------------------- 
    

    一个配置文件可以有多个安全组,一个安全组可以在多个配置文件上

    关于如何重新设计这个有什么建议吗?

    6 回复  |  直到 14 年前
        1
  •  10
  •   Daniel Vassallo    16 年前

    junction table SecurityGroups QAProfile

    CREATE TABLE SecurityGroups_Profiles (
        GroupID     int    NOT NULL,
        ProfileID   int    NOT NULL,
        PRIMARY KEY (GroupID, ProfileID),
        FOREIGN KEY (GroupID) REFERENCES SecurityGroups (GroupID),
        FOREIGN KEY (ProfileID) REFERENCES QAProfile (ProfileID)
    );
    
        2
  •  4
  •   Tim Cooper    14 年前

    QAProfile
    ---------
    ProfileID <pk> -int
    ProfileName
    
    SecurityGroups
    --------------
    GroupID <pk> -int
    GroupName
    
    QASecurityGroups
    ----------------
    ProfileID<pk>
    GroupID <pk>
    
        3
  •  2
  •   Sage    16 年前
    Create Table QAProfileSecurityGroup (
     ProfileID int,
     GroupID int,
     PRIMARY KEY ( ProfileID, GroupID)
    )
    
        4
  •  2
  •   Damir Sudarevic    16 年前
  • alt text

        5
  •  1
  •   James    16 年前

    ProfileSecurityGroups
    ---------------------
    Id, <pk> -int
    ProfileId <fk>,
    SecurityGroupId <fk>
    
        6
  •  1
  •   Keith    16 年前