생활코딩 - 관계형 데이터 모델링 - 4.7. 엔티티간의 연결

Kkd·2024년 11월 26일

코딩 영상 후기

목록 보기
11/34

movie

엔티티 간의 연결(Entity Relationship)

엔티티 간의 연결은 데이터 모델링 과정에서 두 엔터티 사이의 관계(Relationship)를 설정하는 작업입니다. 관계형 데이터베이스에서는 이 연결을 통해 테이블 간의 연관성을 정의하며, 이를 기반으로 데이터를 효율적으로 저장, 조회, 관리할 수 있습니다.


엔티티 간의 관계의 개념

엔티티 간의 연결은 현실 세계의 업무 프로세스비즈니스 로직에서 엔터티 간의 상호작용을 표현합니다. 관계는 두 개 이상의 엔티티 간에 설정되며, 각 엔터티는 주체(Parent) 또는 참조(Child) 역할을 할 수 있습니다.


엔티티 간의 연결 요소

  1. 관계(Relationship)

    • 엔티티 간의 연결 고리를 의미합니다.
    • 관계는 실제 업무의 논리적 연결을 반영하며, 데이터베이스에서 외래 키(Foreign Key)로 구현됩니다.
    • 예: 학생수강정보 간의 관계 → "학생은 수강정보를 가진다."
  2. 키(Key)

    • 기본 키(Primary Key): 한 엔터티의 각 튜플(행)을 고유하게 식별.
    • 외래 키(Foreign Key): 다른 엔터티의 기본 키를 참조하여 관계를 설정.
  3. 카디널리티(Cardinality)

    • 두 엔터티 간의 데이터의 수량 관계를 나타냅니다.
    • 예: "1:1", "1:N", "N:M"
  4. 참조 무결성(Referential Integrity)

    • 외래 키로 연결된 두 엔터티 간의 데이터 일관성을 유지하기 위한 규칙입니다.

엔티티 간의 관계 종류

  1. 1:1 관계 (One-to-One)

    • 한 엔터티의 튜플이 다른 엔터티의 튜플과 하나씩만 연결되는 관계.

    • : 학생 엔터티와 학생증 엔터티

      • "한 학생은 하나의 학생증을 가진다."
    • 테이블 설계:

      • 두 테이블 중 하나에 외래 키를 추가하거나 하나로 합칠 수 있습니다.
      -- 학생 테이블
      학생(학번(PK), 이름, 전공, 학생증번호(FK))
      
      -- 학생증 테이블
      학생증(학생증번호(PK), 발급일)
  2. 1:N 관계 (One-to-Many)

    • 한 엔터티의 튜플이 다른 엔터티의 여러 튜플과 연결되는 관계.

    • : 회원 엔터티와 주문 엔터티

      • "한 회원은 여러 개의 주문을 한다."
    • 테이블 설계:

      • 자식 테이블에 부모의 기본 키를 외래 키로 추가합니다.
      -- 회원 테이블
      회원(회원ID(PK), 이름, 이메일)
      
      -- 주문 테이블
      주문(주문ID(PK), 회원ID(FK), 주문일, 총액)
  3. N:M 관계 (Many-to-Many)

    • 한 엔터티의 튜플이 다른 엔터티의 여러 튜플과 연결되고, 반대도 성립하는 관계.

    • : 학생 엔터티와 강의 엔터티

      • "한 학생은 여러 강의를 듣고, 한 강의는 여러 학생이 수강한다."
    • 테이블 설계:

      • 중간 테이블(Bridge Table)을 만들어 양쪽 엔터티의 키를 외래 키로 가집니다.
      -- 학생 테이블
      학생(학생ID(PK), 이름, 전공)
      
      -- 강의 테이블
      강의(강의ID(PK), 강의명, 교수)
      
      -- 학생-강의 관계 테이블
      학생_강의(학생ID(FK), 강의ID(FK), 수강일)

ERD(Entity-Relationship Diagram)로 표현

  • ERD는 엔터티 간의 관계를 시각적으로 표현하는 도구입니다.
  • 관계를 선으로 연결하며, 카디널리티(1:1, 1:N, N:M)를 표시합니다.

예시: 회원과 주문

회원 ----< 주문
(1)      (N)

엔티티 간의 관계와 JOIN

관계형 데이터베이스에서는 JOIN을 사용하여 엔터티 간의 관계를 기반으로 데이터를 조회합니다.

예시: 회원주문 테이블

SELECT 회원.이름, 주문.주문ID, 주문.총액
FROM 회원
JOIN 주문 ON 회원.회원ID = 주문.회원ID;

엔터티 간 관계 설계 시 주의할 점

  1. 무결성 보장
    • 외래 키 제약 조건(FK)을 사용하여 참조 무결성을 유지합니다.
  2. 적절한 카디널리티 설정
    • 관계의 수량(1:1, 1:N 등)을 업무 요구사항에 맞게 정의합니다.
  3. 중복 제거
    • 데이터 중복이 발생하지 않도록 정규화를 적용합니다.
  4. 중간 테이블 사용
    • N:M 관계는 반드시 중간 테이블을 통해 해결합니다.

엔터티 간의 연결을 잘 설계하면 데이터의 일관성과 무결성을 유지하면서 효율적으로 데이터를 관리할 수 있습니다.


엔티티 간의 연결은 데이터베이스에서 테이블 간의 관계를 설정하고, 이를 활용해 데이터를 조회하는 방식으로 이루어지며, 이러한 과정을 JOIN(조인)이라고 합니다.


엔티티 간의 연결은 데이터베이스에서 테이블 간의 관계를 설정하고, 이를 활용해 데이터를 조회하는 방식으로 이루어지며, 이러한 과정을 JOIN(조인)이라고 합니다.


JOIN이란?

JOIN은 두 개 이상의 테이블을 연결하여 원하는 데이터를 조회할 때 사용하는 SQL 연산입니다.
테이블 간의 연결은 기본 키(Primary Key)외래 키(Foreign Key)를 이용해 이루어지며, JOIN을 통해 테이블에 저장된 데이터를 조합해 결과를 반환합니다.


JOIN의 기본 개념

  • 기본 키와 외래 키

    • 기본 키(Primary Key): 한 테이블에서 각 행을 유일하게 식별하는 컬럼.
    • 외래 키(Foreign Key): 다른 테이블의 기본 키를 참조하여 두 테이블 간 관계를 설정하는 컬럼.
  • JOIN을 통해 테이블 연결

    • 하나의 테이블에서만 데이터를 조회하기 어려운 경우, 두 테이블을 연결해 필요한 데이터를 조회합니다.

JOIN의 종류

  1. INNER JOIN

    • 두 테이블에서 공통된 키 값이 있는 행만 반환합니다.
    • 공통 데이터가 없는 행은 결과에 포함되지 않습니다.
    SELECT *
    FROM 학생 s
    INNER JOIN 수강정보 c ON s.학번 = c.학번;
    • 학생 테이블과 수강정보 테이블의 학번을 기준으로 조인.
  2. LEFT OUTER JOIN

    • 왼쪽 테이블의 모든 행과, 조건에 맞는 오른쪽 테이블의 데이터를 반환.
    • 오른쪽 테이블에 데이터가 없으면 NULL을 반환.
    SELECT *
    FROM 학생 s
    LEFT JOIN 수강정보 c ON s.학번 = c.학번;
    • 학생 테이블의 모든 데이터를 반환하며, 수강정보가 없으면 NULL.
  3. RIGHT OUTER JOIN

    • 오른쪽 테이블의 모든 행과, 조건에 맞는 왼쪽 테이블의 데이터를 반환.
    • 왼쪽 테이블에 데이터가 없으면 NULL을 반환.
    SELECT *
    FROM 학생 s
    RIGHT JOIN 수강정보 c ON s.학번 = c.학번;
  4. FULL OUTER JOIN

    • 두 테이블의 모든 데이터를 반환하며, 조건에 맞지 않는 경우 NULL을 반환.
    SELECT *
    FROM 학생 s
    FULL JOIN 수강정보 c ON s.학번 = c.학번;
  5. CROSS JOIN

    • 두 테이블 간의 모든 행을 데카르트 곱으로 반환.
    • 조건이 없을 경우 모든 조합을 반환하므로 주의해야 함.
    SELECT *
    FROM 학생 s
    CROSS JOIN 수강정보 c;

JOIN의 중요성

JOIN은 데이터베이스에서 정규화된 데이터를 결합일관성무결성을 유지하면서 데이터를 조회하는 데 필수적인 기능입니다. 실무에서는 테이블 간의 관계를 잘 설계하고, JOIN을 통해 효율적으로 데이터를 조합하여 필요한 정보를 추출하는 것이 매우 중요합니다. 😊

추가 학습 자료
kkd0059.log-생활코딩 - 관계형 데이터 모델링 - 4.3. ERD의 구성요소

profile
🌱

0개의 댓글