TOP
class="layout-aside-left paging-number">
본문 바로가기
자격증/SQLD

데이터 모델과 SQL - 관계와 조인의 이해

by 기록자_Recordian 2024. 1. 1.
728x90
반응형

SQLD 1과목 데이터 모델과 SQL

<목차>

 

2. 관계와 조인의 이해

관계
엔터티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서
서로에게 연관성이 부여된 상태

 

1) 관계의 정의

- 사전적으로 정의하면 상호 연관성이 있는 상태

- 관계는 엔터티와 엔터티 간 연관성을 표현하기 때문에 엔터티의 정의에 따라 영향을 받기도 하고, 속성 정의 및 관계 정의에 따라서도 다양하게 변할 수 있음.

 

2) 관계의 페어링

- 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것

- 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 있음

관계의 페어링

3) 관계의 분류

 

ㄱ. 존재에 의한 관계 / 행위에 의한 관계

관계의 분류

 

- 황경빈이란 사원이 DB 팀에 소속되어 있기 때문에 나타나는 즉 존재의 형태에 의해 관계 형성

- 김정재 고객의 '주문한다'라는 행위를 하였기 때문에 주문번호 발생되었으므로,

두 엔터티 사이의 관계는 행위에 의한 관계

 

ㄴ. UML (Unified Modeling Language) - 클래스다이어그램의 연관관계 / 의존관계

 

연관관계: 항상 이용하는 관계로 존재적 관계에 해당

의존관계: 상대방 클래스의 행위에 의해 관계가 형성될 때 구분하여 표현

 

> ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않고 표현

> 클래스다이어그램에서는 이것을 구분하여 연관관계와 의존관계로 표현

클래스다이어그램 분류 표현방법 비고
연관관계 실선 소스코드에서 멤버변수로 선언하여 사용
의존관계 점선 Operation 코드에서 파라미터 등으로 이용

 

4) 관계의 표기법

 

  • 관계명 (Membership): 관계의 이름
  • 관계차수 (Cardinality) : 1:1, 1:M, M:N
  • 관계선택사양 (Optionality): 필수관계, 선택관계

ㄱ. 관계명

- 엔터티가 관계에 참여하는 형태

- 각각의 관계는 두 개의 관계명을 가지고 있음

- 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있음

- 관계시작점: 엔터티에서 관계가 시작되는 편

- 관계끝점: 엔터티에서 관계를 받는 편

 

* 관계명 명명규칙

- 애매한 동사를 피함 ex) 관계된다, 관련이 있다, ~이다, ~하다 등 > 구체적이지 않음.

- 현재형으로 표현 ex) 수강 신청한다, 강의를 한다 / 수강을 신청했다 (X)

 

ㄴ. 관계차수

- 두 개의 엔터티간 관계에서 참여자의 수를 표현하는 것

- 가장 중요한 사항은 한 개의 관계가 존재하느냐 아니면 두 개 이상의 멤버십이 존재하는지를 파악하는 것

 

ㄷ. 관계선택사양

- 관계를 통한 상대방과의 업무적인 제약조건을 표현하는 것으로서 간단하면서 아주 중요한 표기법.

- 필수참여: 참여하는 모든 참여자가 타 엔터티의 참여자와 연결이 되어야 하는 관계

ex) 주문서는 반드시 주문목록을 가져야 함.

- 선택참여: 연관은 있으나 서로가 필수적인 관계는 아닌 관계

ex) 목록은 주문이 될 수도 있고 주문이 되지 않은 목록이 있을수도 있음.

 

* 선택참여로 지정해야 할 관계를 필수참여로 잘못 지정하면 애플리케이션에서 데이터가 발생할 때 반드시 한 개의 트랜잭션으로 제어해야 하는 제약사항 발생.

> 설계단계에서 필수참여와 선택참여는 개발시점에 업무 로직과 직접적으로 관련된 부분이므로 반드시 고려되어야 함.

 

 

5) 관계의 정의 및 읽는 방법

 

ㄱ. 관계 체크사항

- 두 개의 엔터티 사이에서 관계를 정의할 때 다음 사항 체크

  • 두 개의 엔터티 사이에 관심있는 연관규칙이 존재하는가?
  • 두 개의 엔터티 사이에 정보의 조합이 발생되는가?
  • 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
  • 업무기술서, 장표에 관계연결을 가능하게 하는 동사(Verb) 가 있는가?

ㄴ. 관계읽기

  • 기준(Source) 엔터티를 한 개(One) 또는 각 (Each)으로 읽음.
  • 대상(Target) 엔터티의 관계참여도 즉 개수 (하나, 하나 이상)를 읽음.
  • 관계선택사양과 관계명을 읽음.


조인 (JOIN)

 

1) JOIN 개요

 

- 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것

- 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능

- PK와 FK의 값을 기반으로 JOIN 성립

- 조인은 여러 테이블을 하나의 테이블로 만드는 과정

- 조인을 잘못하면 데이터 많아짐. (중복된 데이터가 있을 때 JOIN을 신중히 해야 함.)

 

2) EQUI JOIN (등가 조인)

- 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법

- PK ↔ FK 의 관계를 기반으로 함.

- JOIN의 조건은 WHERE 절에 기술하게 되는데 "=" 연산자를 사용해서 표현

- 참여하는 대상 테이블이 N개라고 했을 때, N개의 테이블로부터 필요한 데이터를 조회하기 위해 필요한 JOIN 조건은

"N-1"

ex) FROM 절에 테이블이 3개가 표히되어 있다면 JOIN 조건은 3-1=2개 이상이 필요

- SELECT 절에서 칼럼에 대한 ALIAS를 사용하는 것처럼 FROM 절의 테이블에 대해서도 ALIAS 사용 가능

( 테이블에 대한 ALIAS를 적용해서 SQL 문장을 작성했을 경우, WHERE 절과 SELECT 절에는 테이블명이 아닌 테이블에 대한 ALIAS 사용해야 함.)

 

 

[EQUI JOUN의 대략적인 형태]

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2;
> WHERE 절에 JOIN 조건을 넣음.

 

[ANSI/ISO SQL 표준 방식]

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1 INNER JOIN 테이블2
ON 테이블1.칼럼명1 = 테이블2.칼럼명2;
> ON 절에 JOIN 조건 넣음.

 

2-1)  ANSI/SO SQL의 FROM 절 JOIN 형태

JOIN 명 특징
INNER JOIN(내부조인) JOIN 조건에서 동일한 값이 있는 행만 반환
(CROSS JOIN, OUTER JOIN 과는 같이 사용 불가)
NATURAL JOIN INNER JOIN의 하위 개념. 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해
EQUI JOIN 수행(NATURAL INNER JOIN 이라고도 표시)
USING 조건절 USING 절에 두 테이블에 존재하는 공통된 컬럼명 사용.
데이터 유형도 동일해야 함. (SQL Server에서는 미지원)
ON 조건절 JOIN 조건이 숨이 있지 않고, 명시적으로 JOIN 조건을 구분할 수 있고,
NATURAL JOIN이나 USING 조건절처럼 칼럼명이 똑같아야 된다는 제약 없이
칼럼명이 상호 다르더라도 JOIN 조건으로 사용 가능.
다만, FROM 절에 테이블이 많아 사용될 경우 다소 복잡하게 보여 가독성이 떨어지는 단점.
CROSS JOIN 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합
OUTER JOIN (외부조인) JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용 가능
LEFT OUTER JOIN 조인 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후,
나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어옴.
우측 JOIN 칼럼에서 같은 값이 없는 경우에는 우측 테이블에서 가져오는 칼럼들은
 NULL 값으로 표기
RIGHT OUTER JOIN 우측 테이블이 기준이 되어 결과 생성.
FULL OUTER JOIN 조인 수행 시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN 하여 결과 생성.
UNION ALL 이 아닌, UNION 기능과 동일. (모든 중복된 행은 하나의 행으로 만듦.)

 

3) NON EQUI JOIN (비등가 조인)

- 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용

- "=" 연산자가 아닌 다른 (Between, >, >=, <, <= 등) 연산자들을 사용하여 JOIN 수행

- 데이터 모델에 따라서 Non EQUI JOIN이 불가능한 경우도 있음.

 

SELECT 테이블1.칼럼명1, 테이블2.칼럼명2, ...
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼명1 BETWEEN 테이블2.칼럼명1 AND 테이블2.칼럼명2;

 


이전글

정규화

 

다음글

모델이 표현하는 트랜잭션의 이해

 

728x90
반응형