기술 정리 & CS/기술면접 대비

[기술면접 대비] Database 1 - DB 기본, 정규화, 종류

yubi5050 2022. 10. 20. 20:40

DB 기본

👉 DB Key의 개념과 종류

  • 슈퍼키(Super Key) : 유일성을 가진 키 전체
  • 후보키 (Candidate Key) :  릴레이션을 구별 할 수 있는 기본키들의 부분집합
  • 기본키 (Primary Key) : 후보키들 중 하나 고른 것
  • 대체키 (Alternate Key) : 후보키들 중 선택된 기본키를 제외한 나머지
  • 외래키 (Foreign Key) : 다른 릴레이션 기본키 참조
  • 복합키 (Composite Key) : 2개 이상 속성을 조합하여 만든키

 

👉 데이터 관계

  • 1:1 관계 : 하나의 레코드가 다른 테이블의 하나의 레코드와 연결 된 것
  • 1:N 관계 : 하나의 레코드가 다른 테이블의 다수의 레코드와 연결 된 것
  • N:M 관계 : 다수의 레코드가 다른 테이블의 다수의 레코드와 연결 된 것 (ex. 게시글 - Tag)

 

👉 기본키 & 외래키 차이

  • 기본키 : 테이블 내 각각의 데이터를 유일하게 구분하는 키
  • 외래키 : 다른 테이블의 기본키를 현재 테이블에 참조하여 사용하는 키

 

👉 Join 이란? Inner Join vs Outer Join 차이 

  • Join : 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 / 하나의 컬럼은 공유
  • Inner Join : 특정 공통된 열을 기준으로 테이블을 합치되 두 열 모두에 데이터가 있는 행에 대해서만 결과를 내는 것
  • Outer Join : 데이터가 존재하는 테이블의 내용은 전부 출력하는 방법
  • Full Outer join : 양쪽 테이블 모두 조합 한 것

 

👉 데이터의 무결성이란?

데이터의 정확성, 일관성, 유효성이 유지되는 것

 

👉 무결성 (Integrity) 종류

DB에 저장된 값과 그것이 표현하는 현실세계 실제값이 일치하는 정확성 / 결함이 없는 성질

참조 무결성 외래키 값은 null또는 참조 릴레이션 기본키값과 동일
 참조된 테이블과 참조한 테이블간 같은 값유지
개체 무결성 (Entity Integrity) 기본키 NULL 허용 x
도메인 무결성 (Domain Integrity) 속성은 그 속성이 정의된 도메인 중 하나여야 됨.
고유 무결성 (Unique Integrity) 특정 속성 내 각 값은 서로 달라야 함.
Key 무결성 릴레이션에는 적어도 하나의 키 존재 해야 함.

 

👉 OLTP (On-Line Transaction Processing) 란?

온라인 사용 자들에 대한 DB 트랜잭션 처리를 의미

 

👉 DDL, DML, DCL 비교

  • DDL (Data Definition Language) : DB TABLE을 생성, 삭제, 변경하는 역할 (CREATE, DROP, ALTER)
  • DML (Data Manipulation Language) : DB 내의 조회, 삽입, 수정, 삭제 역할 (SELECT, INSERT, UPDATE, DELETE)
  • DCL (Data Control Language) : 데이터 권한, 무결성 유지, 병행 제어, 복구, 보호와 관리 역할 (COMMIT, ROLLBCK, REVKE, GRANT)

 

👉 DB 설계시 테이블명을 단수 or 복수

테이블명을 복수로 작성시 그 테이블 자체가 레코드들의 집합이기에 의미 자체가 적절하다.

테이블명을 단수로 작성시 개별 레코드들을 생각하는 것이 아닌 포괄적인 집합을 정의하기에 굳이 복수로 안하여도 됨. 추가로 모든 테이블에 복수형으로 표현(s)하는 것도 어려움

따라서 단수가 조금 더 적절하다고 생각

 

 

참고 : https://velog.io/@drypot/Table-Name

 

 정규화

👉 정규화란?

DB 데이터들의 중복을 줄여, 이상 현상을 방지하고 유연성을 높이는 방법 

 

👉 1정규화, 2정규화, 3정규화 차이

1정규화 (1NF)

  • 도메인 원자값 (모든 속성은 반드시 하나의 속성값을 가져야 함)
  • ex) 철수 - 19 - 수학,과학

 

2정규화(2NF)

  • 부분적 함수 종속 제거 (모든 속성은 기본키에 모두 종속되어야 함)
  • 아래 예시의 기본키는 (이름, 나이) 인데 나이는 이름에 종속되어, 2차 정규형을 위반함
  • ex) 철수 - 19 - 수학 / 철수 - 19 - 과학

 

3정규화(3NF)

  • 이행 함수 종속을 제거 (기본키가 아닌 모든 속성 간에는 서로 종속 될 수 없음)
  • X->Y, Y->Z, X->Z를 만족시 이행함수 종속 발생
  • 아래 예시의 X:번호, Y:등급, Z:할인율 번호에 의해 할인율이 결정됨  
  • ex) 1, 철수 - GOLD - 20% / 2, 영희 - VIP - 30% 

 

DB 성능

👉 DB 성능을 좌우하는 요소 3가지

- 데이터 I/O, CPU, Memory

 

👉RDB의 최적화방법을 설명

  • I/O 관점에서 ssd 사용
  • 메모리 관점에서 캐쉬 히트율 체크 
  • 테이블 파티셔닝 해 놓는 것
  • CPU 관점 CPU Time 체크

 

👉 DB 최적화 방향 3가지

  • DB 설계 최적화 : 모델링시 성능 고려하여 설계 (반정규화, 분산 구조 등)
  • DBMS 최적화 : DBMS 성능 고려하여 메모리, Buffer, Cache 크기 등 
  • SQL 최적화 단계 : SQL 작성시 고려 (Join, Indexing 등)

 

RDBMS, NOSQL

👉 RDBMS vs NoSQL 차이

  SQL NoSQL
종류 MySQL, PostgreSQL, MariaDB, SQLite MongoDB, Amazon Dynamo DB, Redis
특징 장점
정해진 Schema와 데이터 관계에 따라 저장
정규화가 잘되어 있음 (데이터 중복에 최적화 됨)

단점
다만, 스키마 변경시 어렵다는 점
장점
자유로운 Schema로 비관계형 데이터 저장 형태
데이터 중복(비정규화)이 발생하기 쉬움
스케일링 고려 하기 좋고 가용성이 좋다.

단점
데이터 중복 저장 발생 가능
Join이 힘들 수 있음
(서로 다른 컬렉션의 깊은 depth에 각각 Data 존재)
역할 관계가 중요하고 데이터가 자주 수정되는 경우 연관 테이블이 없는 경우
데이터 로깅이나 비정형 데이터 수집
CRUD 읽기(R) 위주고 업데이트가 별로 없을 경우
단위 Database -> Table -> Rows(레코드) -> Columns Database -> Collecitons -> Documents -> Fields 
저장
방식
배열을 통해 데이터를 저장 HashMap 구조를 통해 데이터를 저장

 

👉 MongoDB

  • JSON을 통해 접근 가능, Binary JSON 형태로 데이터가 저장
  • Key-value 데이터 모델의 Document 기반 NOSQL DB
  • 확장성이 좋고, 샤딩, 레플리카셋 등이 지원됨
  • 기본적으로 Object ID라는 Unique 값도 존재
  • ex) Binary JSON이란 Serializer된 JSON 이라고 보면됨. {"hello": "world"} => "\x16\x00\x00\x00\x02hello\x00\x06\x00"로 직렬화

 

👉 MongoDB의 ObjectID 구조는?

유닉스 기반 타임스탬프 (4byte) + 랜덤 값(5byte) + 카운터(3byte) 로 이루어짐

 

👉 Redis란?

인메모리 db이자 key-value 데이터 모델 기반 DB

 

👉 Redis 활용 예시

  • pub/sub 기능을 통한 메시지 채팅 시스템/알림 시스템
  • DB 앞단의 Caching 시스템 활용
  • key-value가 필요한 세션 관리

 

👉 Redis Publish / Subscribe 구조란?

한명의 Client가 메시지를 publish 하여, 해당 Topic에 연결된 다수의 Client들이 메시지를 받는 구조

 

👉 PostgreSQL vs MySQL 특징

PostgreSQL

  • 연결마다 Process 생성하여 많은 메모리 요구(필요시 프로세스 fork함)
  • 다양한 Index 알고리즘 기능 지원(B-tree, hash, GiST, GIN 등)
  • 읽기와 쓰기가 많은 어플리케이션에 적합하며 mvcc 특화 (Locking 없이 읽기 작업 수행)
  • 트랜잭션 격리수준 : Read Committed
  • 데이터 행의 불필요한 버전 관리로 불필요 데이터 보관함 (vacumm 으로 삭제)

 

MySQL

  • 연결마다 Thread 생성하여 안전한 멀티 스레드
  • 기본 B-tree 알고리즘
  • 읽기가 많은 어플리케이션 적합
  • 트랜잭션 격리수준 : Repetable Read

https://yubi5050.tistory.com/132?category=1061955 

 

[DB] PostgreSQL vs MySQL

1. MySQL vs PostgreSQL 특징 비교 PostgreSQL MySQL Architecture ORDBMS (Object-RDBMS) multi-process(연결마다 프로세스 생성, 연결 유저 많으면 많은 메모리 요구) RDBMS single-process(연결마다 쓰레드 생..

yubi5050.tistory.com