새소식

반응형
CS/DB

(2) RDBMS - 테이블 구조/ 키/ 정규형/ Join

  • -
728x90
반응형

 

TL;DR

테이블이란? 행(인스턴스)과 열(릴레이션 스키마)로 이루어진 데이터 집합
뷰란?
데이터 베이스에 존재하는 일종의 가상 테이블
키 Key란? 검색, 정렬 시 튜블을 구별하는 기준이 되는 속성
정규화란? 데이터 중복 저장과 이상현상 문제를 해결하기 위해 데이터를 구조화하는 작업
Join이란? 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것

 

 

✅ 테이블 구조

 

  • 스키마 : 데이터 구조와 구성을 설명
  • 테이블 : 행(인스턴스)과 열(릴레이션 스키마)로 이루어진 데이터 집합
  • 행 : 한 객체에 대한 정보, 튜플 이나 레코드라고 불림
  • 열 : 개체의 특성, 속성이라고 불림.
  • 도메인 : 속성 하나가 취할 수 있는 같은 타입의 원자값들의 집합

 

 뷰 View

  • 데이터 베이스에 존재하는 일종의 가상 테이블
  • 실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하지 않음
  • 뷰를 사용하면 여러 테이블이나 뷰를 하나의 테이블처럼 볼 수 있음

 

👍 뷰의 장점

  • 특정 사용자에게 테이블 전체가 아닌 필요한 컬럼만 보여줄 수 있음
  • 복잡한 쿼리를 단순화해서 사용 가능
  • 쿼리 재사용 가능

 

👎 뷰의 단점

  • 한번 정의된 뷰는 변경할 수 없음
  • 삽입, 삭제, 갱신 작업에 많은 제한 사항을 가짐
  • 자신만의 인덱스를 가질 수 없음

 

키 Key

 

  • 키 Key란? 검색, 정렬 시 튜블을 구별하는 기준이 되는 속성

👆 여기서 용어정리

유일성 : 키로 튜플을 유일하게 식별할 수 있음

최소성 : 튜블을 구분하는데 꼭 필요한 속성들로만 구성

 

더보기
  설명 유일성 최소성
슈퍼키    테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합
⭕️




후보키
  • 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합
  • 모든 테이블은 하나 이상의 후보키를 가짐
⭕️ ⭕️
🌟 기본키

primary key
  •   후보키들 중 하나를 선택한 키
  •   중복 값과 NULL값 불가 (개체 무결성)
⭕️ ⭕️
대체키 (보조키)    
   기본키로 선정되지 않은 후보키

⭕️ ⭕️
외래키
  • 참조 테이블의 기본키
  • 외래키는 중복값을 가질 수 있고 Null 값 허용
  • 사용하는 이유 : 테이블 연결, 중복 방지, 무결성 유지
   

 

 

 

 정규화

  • 테이블 간에 중복된 데이터를 허용하지 않음으로 무결성을 유지하기
  • 한 릴레이션에 여러 엔티티의 어트리뷰트들을 혼합하게 되면 데이터 중복 저장이상현상 문제가 발생한다.
    • 삽입 이상 : 튜플 삽입 시 특정 속성에 해당하는 값이 없어 null을 입력해야 하는 현상
    • 수정 이상 : 튜플 수정 시 중복된 데이터의 일부만 수정되어 일어나는 데이터 불일치
    • 삭제 이상 : 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
  • 이러한 문제 해결을 위해 정규화 과정 진행
    • 관계형 DB에서 중복을 최소화하기 위해 데이터를 구조화하는 작업
  • 릴레이션의 속성들을 나눠 좋은 작은 릴레이션으로 분해하는 작업
  • 정규형이란 정규화 과정을 통해 특정 조건을 만족하는 릴레이션의 스키마 형태

 

👆 나쁜 릴레이션이란?

  • 함수적 종속성은 좋은 릴레이션 설계의 정형적 기준
  • 어떠한 함수적 종속성을 만족하는지에 따라 정규형이 결정
  • 이를 만족하지 못하면 나쁜 릴레이션

 

✌️ 함수적 종속성?

  • 어떤 속성 A의 값을 알면 다른 속성 B의 값을 유일하게 정해지는 관계
  • A → B 라고 표기하며 A를 B의 결정자라는 의미

 

👍 정규화 장점

  • 장점 : 이상 현상 제거

 

👎 정규화 단점

  • JOIN 연산 증가. 릴레이션의 분해로 릴레이션 간의 JOIN 연산이 많아짐
  • 질의에 대한 응답시간이 느려질수도 있음.
  • -> 조인이 많아 성능 저하가 나타나면 반정규화를 적용할 수도 있음.

 

더보기

정규형

각각의 정규형은 다음을 만족해야 한다.

  • 하나의 릴레이션을 분해하고 다시 조인 연산을 했을 때, 데이터 손실이 없어야 함(무손실 조인)
  • 함수적 종속성을 보존

 

  설명 비고
제 1 정규형 (1NF)     테이블 칼럼이 분해되지 않는 원자값을 가져야 함  
제 2 정규형 (2NF)
  • 제 1정규형 만족
  • 모든 칼럼이 부분적 종속이 없어져야 함.
  • = 모든 칼럼이 완전 함수 종족을 만족해야 함.
    = 기본키에 종속되도록 하기
   
  👆완전 함수 종속?

   어떤 속성이 기본키에 대해 완전히 종속일 때
 
   👆부분 함수 종속?
   어떤 속성이 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을 때 기본키를 구성하는 속성 중 일부만 종속될 때.

제 3 정규형 (3NF)
  • 제 2정규형 만족
  • 기본키를 제외한 속성들 간에 이행 종속성이 없어야 함.

   👆이행 종속성?

   A → B , B → C 인 경우 A → C 가 성립될 때. 즉, A를 알면 B를 알고 그를 통해 C를 알 수 있는 경우를 의미

BCNF 정규형     제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해  
   👍 장점
   - 이상현상 문제 해결
   - 저장 공간의 최소화
   - 데이터 베이스 변경 시 재구성 최소화

   👎 단점
   - 조인 연산이 많아져 성능 저하

 

 

 

✅ JOIN

관계형 데이터베이스에서 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법. 여러 개의 테이블을 하나인 것처럼 활용한다.

 

  • 관계형 데이터베이스에서 1:N 관계란 하나의 entity(table)가 관계를 맺은 entity의 여러 객체를 가질 수 있는 구조로 보통 primary key -  foreign key 구조로 나타낼 수 있다.
  • 관계형 데이터베이스에서 N:M 관계란 양쪽 entity 모두가 서로에게 1:N 관계를 갖는 구조로 보통 새로운 테이블을 통해 관계를 맺는다. 예를 들어 학생 테이블과 수강 과목 테이블이 있을 때, 학생과 수강 과목 테이블의 primary key를 foreign key로 갖는 '수강신청'이라는 새로운 테이블을 만들어 N:M 관계를 나타낸다.

 

 

🔺 Inner Join

서로 연관된 내용만 검색하는 조인 방법 (교집합)

 

🔺 Left outer join

기준 테이블 값과 조인 테이블과의 중복된 값 (왼쪽 테이블 기준으로 Join)

 

🔺 Right outer join

오른쪽 테이블 기준으로 Join

 

🔺 Full outer join

모든 테이블의 데이터 (합집합)

 

🔺 Cross join

모든 경우의 수를 표현

 

🔺 Nested Loop Join (중첩 반복 조인)

  • 2개 이상의 테이블에서 하나의 테이블을 기준으로 순차적으로 상대방의 row 를 결합해 원하는 결과를 추출하는 방법
  • Driving Table의 처리 범위를 하나씩 액세스 하면서 추출된 값으로 Driven Table을 조인하는 방식으로 동작
    • 선행 테이블(Driving Table) : 조인 시 먼저 액세스 되는 테이블
    • 후행 테이블(Driven Table) : 조인 시 나중에 액세스 되는 테이블 (Driving이 아닌 나머지 테이블)
    • Driven Table에 조인을 위한 인덱스가 생성되어 있는 것이 좋다
    • WHERE 절로 최대한 데이터를 거를 수 있는 테이블 / 데이터 양이 적은 테이블로 선정
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.