2015-01-20 7 views
0

나는 몇 가지 공통적 인 작업을 수행하는 그룹 기능을 설계하는 Spring MVC 애플리케이션을 개발 중이다. 그래서이 응용 프로그램에는 GroupAccount와 GroupMembers라는 두 개의 테이블이 있습니다. GroupMembers는 GroupAccount와 외래 키 관계를 가지고 있습니다. GroupMembers의 이메일 주소는 Spring Security가 로그인 할 때 사용합니다. 나는 아래에 SQL 코드를 게시 할 것이다.many-to-many 연관성이있다.

현재이 아키텍처에서 groupMember는 하나의 GroupAccount에만 포함될 수 있습니다. 이것은 내가 구현하고자하는 것이 아닙니다. groupMember는 여러 GroupAccount의 일부일 수 있습니다. 나는 당신이 many-to-many를 생각할 것이라는 것을 안다. 그러나 그것은 groupAccount 나 groupMembers 행을 복제하는 것을 의미하지만, 나는 단지 연관성을 원한다. 따라서 Spring-Security가 포함될 때 중복 행을 만들지 않고 단일 groupMember를 많은 groupAccount 중 일부 또는 그 반대로 사용할 수 있습니다. 나는 그것을 분명히하고 싶다. 어떤 제안이나 아이디어가 이것을 달성하는 방법? 내 글이 명확하지 않으면, 설명해 주겠다.

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

P.S : 최대 절전 모드에서 Postgres를 사용하고 있습니다. –

답변

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에 맞지 않다고 생각하지만 아이디어를 얻길 바랍니다.

+0

Ahh, 그래서 사용자가 어떤 그룹의 정보를 저장하고 그 반대의 경우도 접합 테이블에 저장하겠습니까? –

+0

우리는 Borg입니다. 예. 그룹 결합 시간 소인을 저장하려는 경우, 예를 들어, 해당 필드는 접합 테이블로 이동합니다. –

+0

차갑습니다. 고마워. –