delpho

DB에 대하여 - 2 본문

카테고리 없음

DB에 대하여 - 2

delpho 2022. 6. 19. 18:57

_1. 정규화에 대해서 설명해주세요.

 

# 정규화란?

  • 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스
  • 정규화의 기본 목표는 테이블 간에 중복된 데이타를 허용하지 않는다는 것
    • 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지 가능
    • DB의 저장 용량 줄일 수 있음
  • 이러한 테이블을 분해하는 정규화 단계가 정의되어 있는데, 여기서 테이블을 어떻게 분해되는지에 따라 정규화 단계가 달라지는데, 각각의 정규화 단계에 대해 자세히 알아보도록 하자. 

 

 

# 정규화 단계

  • 테이블을 어떻게 분해되는지에 따라 정규화 단계가 달라짐

 

1. 제1 정규화

  • 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것

  • 추신수와 박세리는 여러 개의 취미를 가지고 있기 때문에 제1 정규형을 만족하지 못하고 있음

 

 

2. 제2 정규화

  • 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
    • 완전 함수 종속 👉 기본키(2개 이상일때)중에 특정 컬럼에만 종속된 컬럼(부분적 종속)이 없어야 한다는 것

 

 

  • 위 테이블의 경우 기본키는 (Student, Subject) 두 개로 볼 수 있습니다.이 두 개가 합쳐져야 한 로우를 구분할 수가 있습니다.
  • 근데 Age의 경우 이 기본키중에 Student에만 종속되어 있습니다.
  • 즉, Student 컬럼의 값을 알면 Age의 값을 알 수 있습니다.
  • 따라서 Age가 두 번 들어가는 것은 불필요한 것으로 볼 수 있습니다.
  • 이를 해결하기 위해 아래처럼 테이블을 쪼갬!

 

Student Table
Subject Table

 

 

 

3. 제3 정규화

  • 기본키를 제외한 속성들 간의 이행적 함수 종속이 없는 것
    • 풀어서 말하자면, 기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없는 것
  • 3차 정규화는 2차정규화와 마찬가지로 테이블을 분리함으로써 해결할 수 있음!

 

 

  • 아래와 같은 데이터 구성을 생각해봅시다.
  • Student_id가 기본키이고, 기본키가 하나이므로 2차 정규형은 만족하는 것으로 볼 수 있습니다.
  • 하지만 이 데이터의 Zip컬럼을 알면 Street, City, State를 결정할 수 있습니다.
  • 또한 여러명의 학생들이 같은 Zip코드를 갖는 경우에 Zip코드만 알면 Street, City, State가 결정되기 때문이 이 컬럼들에는 중복된 데이터가 생길 가능성이 있습니다.

 

 

👇👇👇👇👇👇👇👇👇👇

 

 

 

4. BCNF 정규화

  • 3차 정규형을 조금 더 강화한 버전
    • 3차 정규형으로 해결할 수 없는 이상현상을 해결가능
  • 3차정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형입니다.

 

 

  • 아래와 같은 경우를 생각해보면, 후보키는 수퍼키중에서 최소성을 만족하는 건데, 이 경우 (학생, 과목) 입니다.
  • (학생, 과목)은 그 로우를 유일하게 구분할 수 있습니다.
  • 근데 이 테이블의 경우 교수가 결정자 입니다. (교수가 한 과목만 강의할 수 있다고 가정)
  • 즉, 교수가 정해지면 과목이 결정됩니다. 근데 교수는 후보키가 아닙니다.
  • 따라서 이 경우에 BCNF를 만족하지 못한다고 합니다.
  • 3차 정규형을 만족하면서 BCNF는 만족하지 않는 경우는 언제일까요? 바로 일반 컬럼이 후보키를 결정하는 경우입니다. 

 

  • 아래와 같이 테이블이 구성된 경우에 데이터가 중복되고, 갱신 이상이 발생합니다.
  • 예를 들어 Mr.Sim이 강의하는 과목명이 바뀌었다면 두 개의 로우를 갱신해야합니다.
  • 이를 해결하기 위해서는 마찬가지로 테이블을 분리합니다.

👇👇👇👇👇👇👇👇👇👇

 

 

 

 



_2. JOIN에 대해서 설명해주세요.

 

# join

두개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법

 

 

# join의 종류

더보기

inner join

outer join (left / right / full)

cross join

self join

 

  • inner join
    • 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터만 결과 데이터 집합으로 추출

더보기

SELECT p.상품ID, p.상품명, o.상품ID, o.고객ID, o.주문일자, o.주문수량
FROM 상품 p
JOIN 고객주문상품 o
ON p.상품ID = o.상품ID;

 

 

  • left outer join
    • 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터 + Left outer join 키워드 왼쪽에 명시된 테이블에만 존재하는 데이터를 결과 데이터 집합으로 추출

더보기

SELECT p.상품ID, p.상품명, o.상품ID, o.고객ID, o.주문일자, o.주문수량
FROM 상품 p
LEFT OUTER JOIN 고객주문상품 o
ON p.상품ID = o.상품ID;

 

 

  • right outer join
    • 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터 + right outer join 키워드 오른쪽에 명시된 테이블에만 존재하는 데이터를 결과 데이터 집합으로 추출

더보기

SELECT p.상품ID, p.상품명, o.상품ID, o.고객ID, o.주문일자, o.주문수량
FROM 상품 p
RIGHT OUTER JOIN 고객주문상품 o
ON p.상품ID = o.상품ID;

 

  • full outer join
    • 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터 + 각각 테이블에만 존재하는 데이터도 모두 결과 데이터 집합으로 추출

더보기

SELECT p.상품ID, p.상품명, o.상품ID, o.고객ID, o.주문일자, o.주문수량
FROM 상품 p
FULL OUTER JOIN 고객주문상품 o
ON p.상품ID = o.상품ID;

 

 

  • cross join
    • 양쪽 테이블 데이터 집합에서 연결 가능한 행을 모두 결합하여 결과 데이터 집합으로 추출
더보기

SELECT * FROM employee CROSS JOIN department;

  • self join
    • 자기 자신 테이블 데이터 집합에서 공통적으로 존재하는 데이터를 결과 데이터 집합으로 추출

  • employee 테이블의 boss 컬럼과 id 컬럼을 기준으로 LEFT OUTER JOIN인 SELF JOIN을 했더니 각 직원 옆에 직속 상사 정보도 함께 뜸!

 

 

 

 

 

 

 



_3. RDBMS vs NOSQL에 대해서 설명해주세요.

 

# RDBMS

  • 데이터를 2차원의 테이블 형태로 표현하고 테이블 간의 관계를 가질 수 있는 관계형 데이터베이스를 관리할 수 있는 소프트웨어
  • 명확한 데이터 구조를 보장
  • SQL 언어을 사용하여 데이터를 조작
  • ORACLE, MySQL, Maria DB 등

 

 

# NoSQL

  • 데이터와 트래픽 양이 급증하면서 관계형 데이터베이스를 사용하는 것이 하드웨어적으로 큰 비용이 듬 👉 데이터의 일관성을 약간 포기한 대신 여러 대의 컴퓨터에 데이터를 분산하여 저장하는 것(Scale-out : 수평적 확장)을 목표로 등장
  • RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술.
  • RDBMS와는 달리 테이블 간 관계를 정의하지 않는다.
  • 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있음
  • 데이터 일관성이 보장되지않음
  • Redis or MongoDB 등

 

 

 

# NoSQL 종류

  • Key-value
  • Document
  • Column-family
  • Graph

 

 

 

 

 

 

 

 

 

 

출처

https://3months.tistory.com/193

 

데이터베이스 정규화 1NF, 2NF, 3NF, BCNF

데이터베이스 정규화 1NF, 2NF, 3NF, BCNF 데이터베이스 정규화란 데이터베이스의 설계를 재구성하는 테크닉입니다. 정규화를 통해 불필요한 데이터(redundancy)를 없앨 수 있고, 삽입/갱신/삭제 시 발

3months.tistory.com

https://mangkyu.tistory.com/110

 

[Database] 정규화(Normalization) 쉽게 이해하기

지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

mangkyu.tistory.com

https://sparkdia.tistory.com/17

 

테이블 조인 종류(Table Join Type)

데이터베이스에서 데이터는 다수의 테이블에 나뉘어 저장되어 있습니다. 데이터의 중복을 제거하고 무결성을 보장하기 위해서 데이터 성격에 따라 분류하여 테이블에 저장을 하는 겁니다. 이

sparkdia.tistory.com

https://data-make.tistory.com/24

 

[SQL] 조인의 모든 것 - Join, Cartesian Product, EQUI, Non-Equi, Outer, Sefl

여러 테이블의 데이터를 조회하기 - JOIN SQL 에서 Join 은 언제 사용할까요? group by 절을 설명할 때에도 한 번 언급하긴 했었는데, 여러 테이블로 나뉘어진 데이터를 조회하기 위해 사용한다고 생

data-make.tistory.com

https://www.theteams.kr/teams/8573/post/73290

 

SQL의 핵심, 다양한 종류의 조인 by 코드잇

​이전 글인 \'SQL의 핵심, 여러 테이블을 다루는 조인(LEFT OUTER JOIN, RIGHT OUTER JOIN)\'에서는 ​여러가지 종류의 조인들 중에서도 특히 실무에서의 활용도가 높은 LEFT OUTER JOIN과 RIGHT OUTER JOIN에 대해

www.theteams.kr

https://khj93.tistory.com/entry/Database-RDBMS%EC%99%80-NOSQL-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

[Database] RDBMS와 NoSQL의 차이점

이번 포스팅에서는 RDBMS와 NoSQL의 차이점을 알아보려고 합니다. 그전에 RDBMS는 무엇이고 왜 사용하며 NoSQL은 무엇이고 왜 사용을 할까요? 그리고 그 두 DB의 차이점은 무엇이며 서로에 대한 장단점

khj93.tistory.com

https://namu.wiki/w/NoSQL

 

NoSQL - 나무위키

“Not Only SQL” : 데이터를 저장하는 데에는 SQL 외에 다른 방법들도 있다. NoSQL이라고 하는 말은 No 'English'라고 하는 말과 마찬가지다. 세상에는 영어 말고도 수많은 언어가 존재한다. MongoDB에서 사

namu.wiki