带有扭曲的多对多关联
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 的语法不正确,但希望您能理解。
我正在开发一个 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 的语法不正确,但希望您能理解。