책너두 (코딩 인터뷰 완전분석) 32일차 (~252p, 14.4, 14.5, 14.7)

14. 데이터베이스

  • SQL 질의문에는 수많은 변종이 있음.
    • 여러분은 그 가운데 하나를 사용했을 것임.

SQL 문법과 그 변종들

  • 묵시점(implicit) JOIN과 명시적(explicit) JOIN은 둘다 동등함.
    • 어느 쪽을 사용할 것이냐는 개인 취향의 문제임.

비정규화 vs. 정규화 데이터베이스

  • 정규화 데이터베이스는 중복을 최소화하도록 설계된 데이터베이스임.
    • 대신 상당수의 일상적 질의를 처리하기 위해 JOIN을 많이 하게 되는 단점이 있음.
  • 비정규화 데이터베이스는 읽는 시간을 최적화하도록 설계된 데이터베이스임.
    • 대신 데이터베이스에 데이터를 중복해서 저장할 수 있음.

소규모 데이터베이스 설계

  • 면접장에서 데이터베이스를 설계해 보라는 요청을 받을 수 있음.

1단계 : 모호성 처리

  • 데이터베이스에 관계뙨 문제는 모호한 부분이 내포되어 있음.
    • 설계 시작 전, 정확히 무엇을 설계해야 하는지 이해해야 함.

2단계 : 핵심 객체 정의

  • 시스템의 핵심 객체가 무엇인지 살펴봐야 함.
    • 보통 핵심 객체 하나당 하나의 테이블을 사용함.

3단계 : 관계 분석

  • 핵심 객체의 윤곽을 잡고 나면 어떻게 테이블을 설계해야 할 지 감을 잡을 수 있음.
    • 테이블끼리의 관계
      • 다대다, 일대다

4단계 : 행위 조사

  • 세부적인 부분을 채워 넣어야 함.
    • 흔하게 수행될 작업들을 살펴봄.
    • 관련된 데이터를 어떻게 저장하고 가져올 것인지 이해해야 함.

대규모 데이터베이스 설계

  • 대규모 확장성이 높은 데이터베이스를 설계할 떄 JOIN 연산은 일반적으로 아주 느리다고 간주해야 함.
    • 따라서 데이터를 비정규화 해야 함.

면접 문제

14.4 JOIN

  • 서로 다른 종류의 JOIN은 어떤 것들이 있는가? 각각이 어떻게 다르고 어떤 상황에서 어떤 JOIN과 어울리는지 설명하라.

14.5 비정규화

  • 비정규화(denormalization)란 무엇인가? 그 장단점을 설명하라.

14.7 성적 데이터베이스 설계

  • 학생들의 성적을 저장하는 간단한 데이터베이스를 생각해 보자. 이 데이터베이스를 설계하고, 성적이 우수한 학생(상위 10%) 목록을 반환하는 SQL 질의문을 작성하라. 단, 학생 목록은 평균 성적에 따라 내림차순으로 정렬되어야 한다.

댓글

Designed by JB FACTORY