我正在开发一个Spring-MVC应用程序,我正在设计组功能,以便共同完成一些常见任务。所以在应用程序中,我有2个表,GroupAccount和GroupMembers。 GroupMembers与GroupAccount具有外键关系。 Spring-Security使用GroupMembers的电子邮件地址进行登录。我将在底部发布SQL代码。
目前,使用此架构,groupMember只能是一个GroupAccount的一部分。这不是我想要实现的。 groupMember可以是多个GroupAccount的一部分。我知道你会认为多对多,但这意味着复制groupAccount或groupMembers行,但我只想要一个关联。因此,单个groupMember可以是许多groupAccounts的一部分,反之亦然,而不会因涉及Spring-Security而创建重复的行。我希望我说清楚。任何建议或想法如何实现这一目标?如果我的帖子不清楚,请告诉我,我将尽最大努力解释。
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;
欢迎提出任何指示。非常感谢你。
答案 0 :(得分:1)
除非我遗漏了某些内容,否则您需要为多对多关系创建联结表。
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的语法是正确的,但我希望你明白这一点。