1 : 1 관계 (일대일 관계)

  • 어느 엔티티 쪽에서 상대 엔티티와 단 하나의 관계를 가지는 것

 

예를 들어 우리나라는 일부일처제로 한 남자는 한 여자와, 한 여자는 한 남자와 밖에 결혼을 할 수 없다.

남편 또는 부인을 2명 이상 둘 수 없는데, 이러한 관계가 1 : 1관계다.

 

1 : N 관계 (일대다 관계)

  • 한 쪽 엔티티가 관계를 맺은 엔티티 쪽의 여러 객체를 가질 수 있는 것

 

현실에서는 1:N 관계가 많은데, 실제 DB를 설계할 때 자주 쓰이는 방식이다.

1:N 관계는 M:N처럼 새로운 테이블을 만들지 않는다.

예를 들어 부모와 자식 관계를 생각해보면, 부모는 자식을 1명, 2명, 3명 , 그 이상도 가질 수 있다. 이를 부모가
자식을 소유한다고( has a 관계 ) 표현한다.

 

반대로 자식 입장에서는 부모를 하나만 가질 수 밖에 없다.
이러한 관계를 1:N 관계라고 한다.


부모 테이블에서는 내 자식들이 누구인지 정보를 넣을 필요가 없고, 자식 테이블에서만 각각의 자식들이
자신의 부모 정보를 FK로 넣음으로써 관계를 표현한다.

 

 

 

M : N 관계 (다대다 관계)

  • 관계를 가진 양쪽 엔티티 모두에서 서로가 서로를 1:N 관계로 보고 있는 것

 

예를 들어, 학원과 학생의 관계를 생각해보면, 한 학원에는 여러명의 학생이 수강할 수 있으므로 1:N 관계를 가진다.
반대로 학생도 여러개의 학원을 수강할 수 있으므로, 이 사이에서도 1:M 관계를 가진다.
그러므로 학원과 학생은 M:N관계를 가진다고 할 수 있다.

 

M:N 관계는 서로가 서로를 1:N 관계로 갖고 있기 때문에 서로의 PK를 자신의 FK로 갖고 있어야 한다.

일반적으로 M:N관계는 두 테이블의 PK를 복합키로 갖는 또 다른 테이블을 생성해서 관리한다.

 

'DB' 카테고리의 다른 글

SQL INNER JOIN과 OUTER JOIN  (0) 2022.02.24

JOIN

  • 여러 테이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들어서 결과를
    보여주는 것
  • 2개의 테이블을 조합하여 하나의 열로 표현한다.

 

예시)

EMP 테이블   DEPT 테이블
EMPNO ENAME JOB DEPTNO   DEPTNO DNAME LOC
7839 KING PRESIDENT 90 10 ACCOUNT N_YORK
7566 JONES MANAGER 20 20 RESEARCH DALLAS
7788 SCOTT ANALYST 10 30 SALES CHICAGE
7654 MARTIN SALESMAN 30 40 OPERATE BOSTON
7900 JAMES CLERK        

 

 

 

JOIN 종류

1. INNER JOIN

  • 조건에 해당하는 값만 출력
  • 서로 연관된 내용만 검색하는 조인 방법

명시적 조인 표현 암시적 조인 표현
SELECT a.empno, a.ename, a.job, a.deptno, b.dname
FROM EMP a JOIN DEPT b
ON a.deptno = b.deptno;
SELECT a.empno, a.ename, a.job, a.deptno, b.dname
FROM EMP a, DEPT b             
WHERE a.deptno= b.deptno; 

 

조인 결과

"KING"과 "JAMES"의 DEPTNO가 DEPT 테이블에 존재하지 않는다. 이 상태에서 INNER JOIN을 하면 
"KING", "HAMES"의 데이터는 조회되지 않는다.

 

2. OUTER JOIN

  • 조인하는 여러 테이블에서 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블의 
    내용을 전부 출력하는 방법
  • 조인 조건에 만족하지 않아도 해당 행을 출력하고 싶을 때 사용

 

OUTER JOIN 종류

  LEFT OUTER JOIN 

  • 왼쪽 테이블      =>  값이 있는 행은 전부 출력
    오른쪽 테이블   =>  조건에 맞는 것만 출력

명시적 조인 표현 암시적 조인 표현
SELECT a.empno, a.ename, a.job, a.deptno, a.dname
FROM EMP a LEFT OUTER JOIN  DEPT b
ON a.deptno = b.deptno;
SELECT a.empno, a.ename, a.job, a.deptno, a.dname
FROM EMP a, DEPT b
WHERE a.deptno = b.deptno(+);

 

 조인 결과 

 조인 조건에 만족하지 않는 "KING"과 "JAMES"도 출력됨.

'DB' 카테고리의 다른 글

관계형 데이터베이스 1:1, 1:N, M:N 관계  (0) 2022.02.24

+ Recent posts