多对多与扭曲有关

时间:2015-01-20 15:29:13

标签: database database-design

我正在开发一个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;

欢迎提出任何指示。非常感谢你。

1 个答案:

答案 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的语法是正确的,但我希望你明白这一点。