본문으로 바로 가기

SQL 개발자 (SQLD) 데이터 모델과 SQL 핵심정리

26년 11월 1일 검사 완료

데이터 모델과 SQL, 핵심정리

  • 1정규형은 한 칸에 값 하나(원자값), 2정규형은 부분 함수 종속 제거, 3정규형은 이행 함수 종속 제거입니다.
  • BCNF는 모든 결정자가 후보키가 되도록 나눈 상태입니다.
  • 정규화는 입력·수정·삭제 이상을 줄이지만, 조회할 때 조인이 늘어날 수 있습니다.
  • 트랜잭션으로 함께 처리되어야 하는 엔터티 관계는 필수(Mandatory) 관계로 표현합니다.
  • Null 을 포함한 산술 연산은 Null, 비교 연산은 알 수 없음(Unknown)이며, 집계 함수는 Null 을 빼고 계산합니다.
  • 인조식별자는 키가 단순해지지만 중복 데이터가 생기기 쉽고 인덱스가 늘어날 수 있습니다.
중요도
★★★★☆ (4 / 5)
출제 비중
데이터 모델링의 이해 10문항 중 약 5문항 (45%)

정규화(1~3정규형·BCNF)와 반정규화, 관계와 조인의 관계, 모델에서 트랜잭션을 표현하는 방법, Null 속성의 성질, 본질식별자와 인조식별자의 장단점을 다룹니다.

📖 데이터 모델과 SQL 개념 정리 더보기 →

데이터 모델과 SQL 대표 문제 10개

예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 1. 테이블의 모든 속성이 더 이상 나눌 수 없는 하나의 값(원자값)만 가지도록 만드는 정규화 단계는?

  1. ① 제2정규형
  2. ② 제3정규형
  3. ③ BCNF
  4. ④ 제1정규형
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ④ 제1정규형

핵심: 1정규형=원자값, 2정규형=부분 종속 제거, 3정규형=이행 종속 제거

정규화 단계는 순서대로 외우면 쉽습니다.

  • 제1정규형: 한 칸에 값이 하나(원자값). 반복되는 값을 없앤다
  • 제2정규형: 주식별자의 일부에만 종속된 속성(부분 함수 종속)을 없앤다
  • 제3정규형: 주식별자가 아닌 속성끼리의 종속(이행 함수 종속)을 없앤다
  • BCNF: 모든 결정자가 후보키가 되게 한다

틀린 선지

  • 제2정규형: 부분 함수 종속을 없애는 단계로, 원자값은 그 전에 이미 만족해야 합니다.
  • 제3정규형: 이행 함수 종속을 없애는 단계입니다.
  • BCNF: 결정자가 모두 후보키가 되도록 하는 단계입니다.
예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 2. 복합 주식별자를 가진 테이블에서, 주식별자의 일부에만 종속된 속성(부분 함수 종속)을 분리하는 정규화 단계는?

  1. ① 제1정규형
  2. ② 제3정규형
  3. ③ 제2정규형
  4. ④ 제4정규형
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ③ 제2정규형

핵심: 부분 함수 종속 제거 = 제2정규형

제2정규형은 주식별자 전체가 아니라 일부에만 종속된 속성을 다른 테이블로 떼어 내는 단계입니다. 예를 들어 주식별자가 (학번, 과목코드)인데 과목명이 과목코드만으로 정해지면, 과목명을 과목 테이블로 분리합니다.

틀린 선지

  • 제1정규형: 원자값(한 칸에 값 하나)을 만드는 단계입니다.
  • 제3정규형: 일반 속성끼리의 종속(이행 함수 종속)을 없애는 단계입니다.
  • 제4정규형: 다치 종속을 없애는 단계로, 부분 함수 종속과는 다릅니다.
예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 3. 다음 테이블은 제2정규형까지 만족한다. 이 테이블이 만족하지 못하는 정규형으로 가장 알맞은 것은? 사원(사원번호, 사원명, 부서번호, 부서명) - 주식별자: 사원번호 - 사원번호 → 부서번호, 부서번호 → 부서명

  1. ① 제3정규형
  2. ② 제1정규형
  3. ③ 제2정규형
  4. ④ 반정규형
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ① 제3정규형

핵심: A→B, B→C 처럼 일반 속성끼리 종속되면 제3정규형 위반

사원번호가 부서번호를 정하고, 부서번호가 다시 부서명을 정합니다(사원번호 → 부서번호 → 부서명). 이렇게 주식별자가 아닌 속성(부서번호)이 다른 속성(부서명)을 정하는 것을 이행 함수 종속이라 하며, 이것을 없애야 제3정규형이 됩니다. 부서(부서번호, 부서명) 테이블을 따로 만들면 해결됩니다.

틀린 선지

  • 제1정규형: 모든 칸에 값이 하나씩이라 이미 만족합니다.
  • 제2정규형: 문제에서 이미 만족한다고 했고, 주식별자가 사원번호 하나라 부분 함수 종속이 생길 수 없습니다.
  • 반정규형: 정규형의 한 단계가 아니라, 성능을 위해 일부러 중복을 허용하는 반정규화를 떠올리게 하는 말입니다.
예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 4. 급여(SAL)가 3000, 상여(COMM)가 NULL 인 행에서 SAL + COMM 의 결과는?

  1. ① NULL
  2. ② 오류가 발생한다
  3. ③ 0
  4. ④ 3000
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ① NULL

핵심: NULL 이 섞인 산술 연산 결과는 NULL

NULL 은 '값을 모름'이라는 뜻입니다. 모르는 값에 무엇을 더해도 결과를 알 수 없으므로 NULL 이 들어간 산술 연산(+, −, ×, ÷)의 결과는 NULL 입니다. 3000 을 얻으려면 NVL(COMM, 0) 처럼 NULL 을 0 으로 바꾼 뒤 더해야 합니다.

틀린 선지

  • 오류가 발생한다: 오류 없이 NULL 이 결과로 나옵니다.
  • 0: NULL 연산 결과는 0 이 아니라 NULL 입니다.
  • 3000: NULL 을 0 처럼 계산했을 때의 값입니다. NULL 은 0 이 아닙니다.
예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 5. [T 테이블] ID | C 1 | 10 2 | 20 3 | NULL 4 | 30 다음 SQL 의 결과는? SELECT COUNT(*), COUNT(C), AVG(C) FROM T;

  1. ① 4, 3, 15
  2. ② 4, 4, 15
  3. ③ 3, 3, 20
  4. ④ 4, 3, 20
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ④ 4, 3, 20

핵심: 집계 함수는 NULL 을 빼고 계산, COUNT(*)만 모든 행

  1. COUNT(*): 행 전체를 세므로 4
  2. COUNT(C): C 가 NULL 이 아닌 행만 세므로 10, 20, 30 → 3
  3. AVG(C): NULL 을 뺀 값만 평균 → (10 + 20 + 30) ÷ 3 = 60 ÷ 3 = 20

검산: NULL 을 0 으로 보면 60 ÷ 4 = 15 가 되지만, AVG 는 NULL 행을 빼고 나누므로 20 입니다.

틀린 선지

  • 4, 3, 15: AVG 를 NULL 행까지 포함해 4로 나눈 값입니다. AVG 는 NULL 을 빼고 3으로 나눕니다.
  • 4, 4, 15: COUNT(C) 는 NULL 을 세지 않으므로 4가 아니라 3입니다.
  • 3, 3, 20: COUNT(*) 는 NULL 이 있는 행도 세므로 4입니다.
예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 6. NULL 에 대한 설명으로 옳지 않은 것은?

  1. ① NULL 은 숫자 0 이나 공백 문자와 다르다.
  2. ② 값이 NULL 인 행을 찾으려면 IS NULL 을 쓴다.
  3. ③ NULL 과 숫자를 더하면 결과는 NULL 이다.
  4. ④ NULL = NULL 을 비교하면 결과는 참(TRUE)이다.
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ④ NULL = NULL 을 비교하면 결과는 참(TRUE)이다.

핵심: NULL 과의 비교(=, <> 등)는 참도 거짓도 아닌 '알 수 없음'

NULL 은 '모르는 값'이라서 NULL 과 무엇을 비교해도 결과는 참도 거짓도 아닌 '알 수 없음(UNKNOWN)' 입니다. NULL = NULL 도 마찬가지입니다. WHERE 절은 참인 행만 돌려주므로 `WHERE C = NULL` 은 아무 행도 찾지 못합니다.

틀린 선지

  • NULL 은 숫자 0 이나 공백 문자와 다르다: 옳은 설명입니다. (Oracle 은 빈 문자열 ''을 NULL 로 다루는 점은 따로 기억하세요)
  • 값이 NULL 인 행을 찾으려면 IS NULL 을 쓴다: 옳은 설명입니다.
  • NULL 과 숫자를 더하면 결과는 NULL 이다: 옳은 설명입니다.
예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 7. 정규화를 하면 줄일 수 있는 문제로 가장 알맞은 것은?

  1. ① 조회할 때 필요한 조인 횟수
  2. ② 데이터를 넣고 고치고 지울 때 생기는 이상 현상
  3. ③ 데이터베이스의 테이블 개수
  4. ④ SQL 문장의 길이
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ② 데이터를 넣고 고치고 지울 때 생기는 이상 현상

핵심: 정규화 = 중복 제거 → 입력·수정·삭제 이상 감소 (대신 조인 증가)

정규화는 중복 데이터를 없애 입력 이상·수정 이상·삭제 이상을 줄이는 작업입니다. 예를 들어 부서명이 사원 행마다 반복되면, 부서명을 바꿀 때 여러 행을 모두 고쳐야 하고 하나라도 빠뜨리면 데이터가 어긋납니다(수정 이상).

틀린 선지

  • 조회할 때 필요한 조인 횟수: 정규화를 하면 테이블이 나뉘므로 조인은 오히려 늘어날 수 있습니다.
  • 데이터베이스의 테이블 개수: 테이블을 나누므로 보통 늘어납니다.
  • SQL 문장의 길이: 조인이 늘어 SQL 이 길어질 수 있습니다.
예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 8. 부모-자식 관계로 연결된 두 테이블을 조인할 때 일반적으로 서로 같은지 비교하는 컬럼은?

  1. ① 자식 테이블의 기본키와 부모 테이블의 일반 컬럼
  2. ② 두 테이블의 모든 컬럼
  3. ③ 두 테이블의 행 번호(ROWNUM)
  4. ④ 부모 테이블의 기본키와 자식 테이블의 외래키
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ④ 부모 테이블의 기본키와 자식 테이블의 외래키

핵심: 관계 = 부모 PK 와 자식 FK, 조인은 이 둘을 같게(=) 비교

모델의 관계는 실제 테이블에서 부모의 기본키(PK)와 자식의 외래키(FK)로 만들어집니다. 그래서 두 테이블을 조인할 때는 보통 `부모.PK = 자식.FK` 조건을 씁니다. 예: `DEPT.DEPTNO = EMP.DEPTNO`

틀린 선지

  • 자식 테이블의 기본키와 부모 테이블의 일반 컬럼: 관계를 연결하는 것은 부모의 기본키와 자식의 외래키입니다.
  • 두 테이블의 모든 컬럼: 모든 컬럼을 비교하면 원하는 결과가 나오지 않습니다. 관계를 만드는 키 컬럼만 비교합니다.
  • 두 테이블의 행 번호(ROWNUM): ROWNUM 은 조회할 때 붙는 순번이라 두 테이블을 연결하는 값이 아닙니다.
예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 9. 다음 테이블에서 가장 먼저 해결해야 할 정규화 문제는? 수강(학번, 과목코드, 성적, 과목명) - 주식별자: (학번, 과목코드) - (학번, 과목코드) → 성적, 과목코드 → 과목명

  1. ① 성적이 학번 하나에만 종속되어 제2정규형을 위반한다.
  2. ② 과목명이 주식별자의 일부(과목코드)에만 종속되어 제2정규형을 위반한다.
  3. ③ 한 칸에 값이 여러 개 들어 있어 제1정규형을 위반한다.
  4. ④ 과목명이 성적에 종속되어 제3정규형을 위반한다.
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ② 과목명이 주식별자의 일부(과목코드)에만 종속되어 제2정규형을 위반한다.

핵심: 복합키 일부(과목코드)→과목명 = 부분 종속 → 제2정규형 위반

주식별자는 (학번, 과목코드) 두 속성입니다.

  1. 성적은 학번과 과목코드를 모두 알아야 정해지므로 문제가 없습니다.
  2. 과목명은 과목코드 하나만 알면 정해집니다 → 주식별자 일부에만 종속(부분 함수 종속)

따라서 제2정규형을 위반하며, 과목(과목코드, 과목명) 테이블로 분리해야 합니다.

틀린 선지

  • 성적이 학번 하나에만 종속되어 제2정규형을 위반한다: 성적은 (학번, 과목코드) 전체에 종속되어 있습니다.
  • 한 칸에 값이 여러 개 들어 있어 제1정규형을 위반한다: 주어진 내용에 한 칸에 여러 값이 들어간다는 조건이 없습니다.
  • 과목명이 성적에 종속되어 제3정규형을 위반한다: 주어진 종속 관계에 성적 → 과목명은 없습니다.
예상문제검수 완료데이터 모델링의 이해 › 데이터 모델과 SQL★★★★☆

문제 10. 주문상세 테이블의 주식별자를 (주문번호, 상품번호) 대신 일련번호 하나로 바꾸었다. 이때 생길 수 있는 문제로 가장 알맞은 것은?

  1. ① 같은 주문번호·상품번호 조합이 중복으로 입력될 수 있다.
  2. ② 주문 테이블과 외래키로 연결할 수 없게 된다.
  3. ③ 주문상세 행 수가 줄어든다.
  4. ④ 주문번호로 주문상세를 조회할 수 없게 된다.
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ① 같은 주문번호·상품번호 조합이 중복으로 입력될 수 있다.

핵심: 인조식별자 단점: 중복 데이터 위험, 필요한 인덱스 증가

일련번호 같은 인조식별자를 쓰면 키가 단순해지는 장점이 있지만, 일련번호만 다르면 같은 주문·같은 상품이 두 번 들어가도 막을 수 없습니다. 이를 막으려면 (주문번호, 상품번호)에 별도의 UNIQUE 인덱스를 더 만들어야 하므로 인덱스도 늘어납니다.

틀린 선지

  • 주문 테이블과 외래키로 연결할 수 없게 된다: 주문번호를 일반 속성(외래키)으로 두면 계속 연결할 수 있습니다.
  • 주문상세 행 수가 줄어든다: 주식별자를 바꾼다고 데이터 행 수가 줄지 않습니다.
  • 주문번호로 주문상세를 조회할 수 없게 된다: 주문번호 컬럼은 그대로 남아 있으므로 조회할 수 있습니다.

직접 풀어서 확인해 보세요.

AI 작성 · 운영진 검수 전