DB 개념

정규화와 트랜잭션을 짧은 문장으로 반복합니다.

DB 개념은 단어만 외우면 헷갈리기 쉽습니다. 각 용어가 어떤 문제를 해결하는지 연결해서 이해하면 실기 서술형과 빈칸 문제에 대응하기 쉽습니다.

정규화 1NF, 2NF, 3NF 정리

정규화는 데이터 중복을 줄이고 삽입, 삭제, 갱신 이상을 줄이기 위해 테이블을 구조화하는 과정입니다.

  • 1NF: 컬럼 값이 원자값을 갖도록 반복 그룹을 제거합니다.
  • 2NF: 부분 함수 종속을 제거합니다.
  • 3NF: 이행 함수 종속을 제거합니다.
핵심 암기: 1NF는 원자값, 2NF는 부분 종속 제거, 3NF는 이행 종속 제거입니다.

연습 문제 정답/해설: 학번이 학과코드를 결정하고 학과코드가 학과명을 결정한다면 학번이 학과명을 간접 결정합니다. 이는 이행 함수 종속이므로 3NF 관점에서 분리 대상입니다.

트랜잭션 ACID 쉽게 외우기

트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위입니다. 계좌 이체처럼 중간에 일부만 성공하면 안 되는 작업을 떠올리면 이해하기 쉽습니다.

  • 원자성: 작업은 모두 수행되거나 모두 취소되어야 합니다.
  • 일관성: 트랜잭션 전후 데이터는 정의된 규칙을 만족해야 합니다.
  • 고립성: 동시에 실행되는 트랜잭션이 서로 부적절하게 간섭하지 않아야 합니다.
  • 지속성: 커밋된 결과는 장애가 발생해도 보존되어야 합니다.

자주 틀리는 포인트: 원자성은 쪼갤 수 없다는 뜻이고, 지속성은 커밋 후 결과가 사라지지 않는다는 뜻입니다.

연습 문제 정답/해설: 이체 중 출금만 되고 입금이 실패했다면 원자성이 깨진 상황입니다.

기본키, 후보키, 외래키

키는 테이블에서 행을 식별하거나 테이블 사이의 관계를 표현할 때 사용합니다.

  • 후보키: 행을 유일하게 식별할 수 있는 속성 또는 속성 집합입니다.
  • 기본키: 후보키 중 대표로 선택한 키입니다. 중복과 NULL을 허용하지 않습니다.
  • 외래키: 다른 테이블의 기본키를 참조해 관계를 유지합니다.

연습 문제 정답/해설: 주문 테이블의 user_id가 회원 테이블의 id를 참조한다면 주문.user_id는 외래키입니다.

데이터 모델링과 ERD

데이터 모델링은 업무에서 필요한 데이터를 엔터티, 속성, 관계로 정리하는 과정입니다. ERD는 이 관계를 시각적으로 표현해 테이블 설계의 기준을 잡는 데 도움을 줍니다.

  • 엔터티: 관리해야 하는 대상입니다.
  • 속성: 엔터티를 설명하는 세부 정보입니다.
  • 카디널리티: 한 인스턴스가 다른 인스턴스와 몇 개까지 연결되는지 나타냅니다.

연습 문제 정답/해설: 한 회원이 여러 주문을 만들 수 있고 주문은 한 회원에게 속한다면 회원과 주문은 1:N 관계입니다.

관계형 모델 용어

관계형 모델에서는 테이블을 릴레이션, 행을 튜플, 열을 속성이라고 부릅니다. 같은 개념을 다른 용어로 묻는 문제에 대비해야 합니다.

  • 도메인: 속성이 가질 수 있는 값의 범위입니다.
  • 릴레이션 스키마: 릴레이션의 구조 정의입니다.
  • 릴레이션 인스턴스: 특정 시점에 저장된 실제 튜플 집합입니다.

자주 틀리는 포인트: 릴레이션은 테이블 구조만 뜻하는 것이 아니라 문맥에 따라 실제 데이터 집합까지 가리킬 수 있으므로 스키마와 인스턴스를 구분하세요.

DDL, DML, DCL, TCL

SQL 명령은 목적에 따라 구조 정의, 데이터 조작, 권한 제어, 트랜잭션 제어로 나눌 수 있습니다.

  • DDL: CREATE, ALTER, DROP처럼 구조를 정의합니다.
  • DML: SELECT, INSERT, UPDATE, DELETE처럼 데이터를 조회하거나 변경합니다.
  • DCL: GRANT, REVOKE처럼 권한을 제어합니다.
  • TCL: COMMIT, ROLLBACK처럼 트랜잭션을 제어합니다.

연습 문제 정답/해설: 사용자에게 테이블 조회 권한을 주는 명령은 권한 제어에 해당하므로 DCL의 GRANT입니다.

인덱스의 장점과 주의점

인덱스는 검색 성능을 높이기 위해 사용하는 자료구조입니다. 특정 컬럼으로 자주 검색하거나 정렬한다면 인덱스가 도움이 될 수 있습니다.

다만 인덱스는 저장 공간을 사용하고, 데이터가 추가되거나 수정될 때 인덱스도 함께 갱신해야 합니다. 조회가 빨라지는 대신 쓰기 비용이 늘어날 수 있습니다.

자주 틀리는 포인트

  • 모든 컬럼에 인덱스를 만드는 것이 항상 좋은 것은 아닙니다.
  • 카디널리티가 낮은 컬럼은 효과가 제한적일 수 있습니다.
  • 인덱스는 논리 설계보다 물리적 성능 개선에 가까운 주제입니다.
DB 문제 풀기