DB
DB
1. PK vs FK vs ER
- Primary Key
- 테이블에서 각 Row(행)을 유일하게 구분하는 Column-Key
- Foreign Key
- 하나의 테이블에 있는 Column(열)으로는 그 의미를 표현할 수 없는 경우,
- 다른 테이블의 Primary-Key Column의 값을 반드시 참조해야 하는 Key
- ER(Entity-Relation)모델
- 개체-관계 모델, 데이터베이스를 설계할 때 사용하는 모델 중 하나
2. 참조 무결성
- 관계 데이터베이스 관계 모델에서 관련된 테이블 간의 일관성(데이터 무결성)을 말함
- 사용자의 실수로 관련 데이터가 삭제되거나 수정되는 것을 막아줌
참조 무결성 제약 조건
- 기본 테이블에서 일치하는 필드가 기본키(PK)이거나고유 인덱스를 갖고 있거나 관련 필드의 데이터 형식이 같아야 함
3. DB Transaction(트랜잭션)
- 데이터의 무결성으로 인하여 데이터 작업시에 문제가 생기면, 데이터 작업을 하기 이전 시점으로 모든 데이터를 원상 복구 하는 것
- 모두 실행되거나 모두 실행되지 않거나를 뜻함
4. ACID 란? (트랜잭션의 성질)
- Atomicity(원자성) : 모든 작업이 커밋되거나 롤백되는 특성
- Consistency(일관성) : 데이터는 미리 정해진 특성에 의해서만 저장이 됨. 숫자 형태의 컬럼에 문자열이 들어올 수 없음.
- Isolation(고립성) : 트랜잭션 수행 중에는 다른 트랜잭션의 영향을 주어서도 받아서도 안됨
- Durability(지속성) : 트랜잭션 조작을 완료하고 그 조작이 영구적이 되어 결과를 잃어서는 안됨. 정상적인 상태 뿐만 아니라 장애가 난 상태에서도 결과를 잃어서는 안됨
- DBMS VS RDBMS
5. Oracle VS MySQL
가장 큰 차이점으로는 비용이 있다. 오라클은 충분히 큰 예산과 복잡한 비즈니스 요구에 맞춰 기업고객들을 위해 설계되었다. MySQL은 가장 일반적으로 데이터베이스 기반 웹 사이트 및 Non-Critical 애플리케이션에 사용되는 저가의 데이터베이스 이다.
오라클은 유료인만큼 유용한 기능이 많다. 내장함수, 성능, 대용량 처리에 좋은 파티션 시스템, 힌트 대신 무겁다.
6. RDBMS VS DBMS
- 관계형DB
- 트랜잭션(전부 아니면 무): 전체 트랜잭션이 하나의 단위로 기록. 실패 시 전체 롤백
정규화: DB설계 시 중복을 최소화해서 구조화하는 프로세스
- 장점
- 데이터의 성능이 일반적으로 좋아 정렬, 탐색, 분류가 빠름. 신뢰성이 높아 데이터의 무결성을 보장. 정규화에 따른 갱신 비용을 최소화
- 단점
- 기존에 작성된 스키마를 수정하기 어려움
- 데이터베이스의 부하를 분석하기 어려움
- 빅데이터를 처리하는데 매우 비효율적임
- 비관계형 DB
거대한 Map으로서 key-value 형식을 지원함. 관계형 db와 달리 PK,FK JOIN등 관계를 정의하지 않음. 스키마에 대한 정의가 없다.
- 장점
- 대용량 데이터 처리를 하는데 효율적임. 읽기 작업보다 쓰기 작업이 더 빠르고 관계형 데이터베이스에 비해 쓰기와 읽기 성능이 빠름. 데이터 모델링이 유연함. 뛰어난 확장성으로 검색에 유리함.
- 최적화된 키 값 저장 기법을 사용하여 응답속도나 처리효율 등에서 성능이 뛰어남.
- 복잡한 데이터 구조를 표현할 수 있음.
- 단점
- 쿼리 처리시 데이터를 파싱 후 연산을 해야해서 큰 크기의 document를 다룰 때는 성능이 저하됨.
8. Mybatis
- 객체지향 언어인 자바의 관계형 DB 프로그래밍을 좀 더 쉽게 할 수 있게 도와주는 개발 프레임워크
9. COMMIT vs ROLLBACK
- COMMIT
- 작성한 쿼리문에서 UPDATE, DELETE, INSERT를 수행했을 때, 그 쿼리문 수행결과에 대한 확정을 지음
- ROLLBACK
- 쿼리문 수행결과에 대한 번복을 함
- 쿼리문 수행 이전으로 원상복귀 하겠다는 뜻
10. DML vs DDL vs DCL
- DML
- 데이터베이스에 들어있는 데이터를 조작, 조회, 검색하기 위한 명령어 [ SELECT, DELETE, UPDATE, INSERT ]
- DDL
- 테이블 구조를 정의하는데 사용되는 명령어 [CREATE, ALTER, DROP, TRUNCATE(초기화) ]
- DCL
- 데이터베이스에 접근하거나 객체에 권한을 주는 등 역할을 하는 언어 [ COMMIT, ROLLBACK, GRANT, REVOKE ]
11. 트리거
- DML(데이터 조작어)가 수행됐을때 데이터베이스에서 자동으로 동작하도록 작성된 프로그램.
12. JOIN( 2개 이상의 테이블에서 조건에 맞는 데이터를 추출하기 위하여 사용)
- INNER JOIN
- 2개 이상의 테이블에서 교집합만을 추출
- LEFT JOIN
- 2개 이상의 테이블에서 FROM에 해당하는 부분을 추출
- RIGHT JOIN
- 2개 이상의 테이블에서 FROM과 JOIN하는 테이블에 해당하는 부분을 추출
- OUTER JOIN
- 아웃터 조인 or 풀조인이라고 불림
- 2개 이상의 테이블에서 모든 테이블 해당하는 부분을 추출
13. 데이터베이스 장애
- 트랜잭션 장애 - 트랜잭션을 정상적으로 완료하지 못함
- 시스템 장애 - 하드웨어, 소프트웨어 고장으로 인한 장애
- 디스크 장애 - 디스크 스토리지 일부 or 전체 붕괴로 인한 장애
14. 이상현상
- 삽입이상 : 새 데이터 삽입을 위해 불필요한 데이터도 함께 삽입
- 갱신이상 : 일부 튜플만 변경
- 삭제이상 : 필요한 데이터까지 삭제되어 데이터 손실
15. INDEX
- 검색 속도를 높이기 위한 기술
- 정렬된 상태를 유지하기 때문에 원하는 값을 탐색하는데 빠름.
- DML ( 데이터 조작어 ) 하는 경우에는 쿼리문 실행 속도가 느려짐.
즉, 데이터의 저장 성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능.
사용하기 좋은 예) WHERE절에서 자주 사용되는 Column, 외래키가 자주 사용되는 Column, JOIN에 자주 사용되는 Column,
- 피해야 하는 경우) Data중복도가 높은 Column, DML이 자주 일어나는 Column.