带有扭曲的多对多关联

Many-to-Many association with a twist

我正在开发一个 Spring-MVC 应用程序,在该应用程序中我正在设计用于共同执行一些常见任务的组功能。所以在应用程序中,我有 2 个表,GroupAccount 和 GroupMembers。 GroupMembers 与 GroupAccount 具有外键关系。来自 GroupMembers 的电子邮件地址被 Spring-Security 用于登录。我将 post SQL 代码放在底部。

目前使用此架构,一个群组成员只能是一个群组帐户的一部分。这不是我想要实现的。一个 groupMember 可以是多个 GroupAccount 的一部分。我知道您会想到多对多,但这意味着复制 groupAccount 或 groupMembers 行,但我只想要一个关联。因此,单个 groupMember 可以是 Many groupAccounts 的一部分,反之亦然,而不会创建重复的行,因为 Spring - 涉及安全性。我希望我说清楚了。任何建议或想法如何实现这一目标?如果我的post不清楚,尽管告诉我,我会尽力解释。

SQL代码:

CREATE TABLE GroupAccount (
                groupid NUMERIC NOT NULL,
                groupName VARCHAR,
                adminPassword VARCHAR,
                CONSTRAINT groupid PRIMARY KEY (groupid)
);


CREATE TABLE groupmembers (
                memberid NUMERIC NOT NULL,
                musername VARCHAR,
                mpassword VARCHAR,
                groupid NUMERIC NOT NULL,
                CONSTRAINT memberid PRIMARY KEY (memberid)
);


ALTER TABLE groupmembers ADD CONSTRAINT groupaccount_groupmembers_fk
FOREIGN KEY (groupid)
REFERENCES GroupAccount (groupid)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE;

欢迎任何指点。非常感谢。

除非我遗漏了什么,否则您可以为多对多关系创建一个联结 table。

CREATE TABLE GroupAccount (
                groupid NUMERIC NOT NULL,
                groupName VARCHAR,
                adminPassword VARCHAR,
                CONSTRAINT groupid PRIMARY KEY (groupid)
);

CREATE TABLE GroupMembers (
                memberid NUMERIC NOT NULL,
                musername VARCHAR,
                mpassword VARCHAR,
                CONSTRAINT memberid PRIMARY KEY (memberid)
);

CREATE TABLE AccountMembers (
                groupid NUMERIC NOT NULL,
                memberid NUMERIC NOT NULL,
                PRIMARY KEY (groupid, memberid),
                UNIQUE INDEX (memberid, groupid)
);

我认为 AccountMembers 的语法不正确,但希望您能理解。