我已经接管了具有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,  |
--------------------------------------------

配置文件可以具有多个安全性组,而安全组可以位于多个安全性配置文件中

关于如何重新设计这个的任何建议?

最佳答案

最好重新设计一下,因为通常用逗号分隔的列表不属于SQL数据库。

看起来像一个简单的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)
);

07-25 22:58