본문 바로가기

A.3 · 데이터베이스

국제바칼로레이트 · IB Diploma · Computer Science · SL · 주제 3

이 주제용 영상 수업 영상 페이지 열기
4:23

데이터베이스

학교 도서관은 대출 기록을 하나의 스프레드시트에 보관한다. 각 행에는 학생 이름, 학급, 도서명, 날짜가 포함된다. 학생이 학급을 변경할 때, 수십 개의 행이…

영어 내레이션 · 영어 + 중국어 자막 burned-in

3.1

범위 및 전제 조건

이 배움 자료는 2027년 처음 평가된 과정의 주제 A3, 데이터베이스를 다룹니다: 관계형 데이터베이스, 설계 및 정규화, 그리고 SQL.

선행 지식: B2의 데이터 유형(정수, 문자열, 부울리안, 실수).

English 한국어
SQL/ˌes kjuː ˈel/ SQL
3.2

왜 데이터를 사용할 것인가?

스프레드시트 하나, 여러 가지 문제점

한 학교 도서관이 한 스프레드시트에 대출 기록을 보관한다: 각 행에는 학생 이름, 학급, 도서 제목 및 저자, 날짜가 포함된다. 학생이 학급이 변경되면 수십 개의 행을 수정해야 하며, 일부는 누락된다. 두 행이 동일한 학생에 대해 서로 다른 정보를 가진다. 데이터베이스는 이러한 문제를 방지하기 위해 설계되었다.

데이터베이스 기본 개념

데이터베이스는 체계적으로 정리된 데이터의 집합이다. 데이터베이스 관리 시스템(DBMS)은 이를 저장하고, 쿼리를 실행하며, 접근을 통제하고 백업을 수행하는 소프트웨어이다.

평면 파일의 문제점 관계형 데이터베이스의 해결 방안
데이터 중복: 동일한 데이터가 여러 번 저장됨 각 사실은 한 번만 저장됨
일관성 부족: 복사본 간 정보 불일치 단일 복사본으로 불일치 가능성 없음
검색 및 결합이 어려움 SQL 쿼리로 테이블을 조인함
사용자별 조회 권한 제어 불가 사용자 계정 및 권한 설정

테이블, 레코드 및 키

관계형 데이터베이스는 테이블(관계) 형태로 데이터를 저장한다. 각 레코드(행)는 하나의 항목이며, 각 필드( 열, 속성)는 하나의 성질을 나타낸다.

키 의미 예시
주요 키 모든 레코드에서 값이 고유한 필드 student_id
외부 키 다른 테이블의 주요 키를 가져와 두 테이블을 연결하는 필드 Loan의 student_id
복합 키 두 개 이상의 필드로 구성된 주요 키 (order_id, item_id)

참조 무결성은 비공백 외부 키가 참조되는 키(주요 키 또는 기타 적절한 고유 키)와 일치함을 요구하며, 공백 허용 외부 키는 특정 참조가 없음을 나타낼 수 있다: 존재하지 않는 학생을 인용할 수 없는 대출 기록은 허용되지 않는다.

주요 키 customer_id를 가진 Customer 테이블과 이를 가리키는 외래 키를 가진 Order 테이블; inner join은 6개의 행을, left join은 7개의 행을 반환하며,customer Ben은 주문이 없음
외부 키는 각 주문을 해당 고객과 연결함
English 한국어
join/dʒɔɪn/ 조인
aggregate function/ˈæɡrɪɡeɪt ˈfʌŋkʃn/ 집계 함수
transaction/trænˈsækʃn/ 트랜잭션
3.3

데이터베이스 설계

개체 및 관계

개체는 데이터를 저장하는 대상입니다: 학생, 책 등. 개체-관계도(ERD)는 개체와 그들 간의 관계를 보여줍니다.

ER 도식: student_id(PK), name, year_group를 가진 학생이 여러 대출을 합니다; loan_id(PK), student_id(FK), book_id(FK), date_out를 가진 각 대출은 one 권의 책(book_id(PK), title, author)에 해당합니다. 'many' 끝부분은 까마귀 발자국으로 표시함
한 학생은 여러 대출을 하며, 각 대출은 한 권의 책에 해당합니다
관계 의미 예시
일대일 각 A에는 하나의 B가 매칭됨 학생과 그 사물함
일대다 하나인 A는 여러 B를 가짐 한 학생, 여러 대출
다대다 여러 A, 여러 B 학생과 책

다대다 관계는 직접 저장할 수 없으며, 이를 연결 표를 통해 두 개의 일대다 관계로 분리합니다. 여기에서 Loan입니다.

정규화

정규화는 중복을 제거하기 위해 표를 조직화합니다. 비정규화된 표 하나부터 시작합니다:

주문_id 고객 전화번호 품목
501 리나 1381 펜, 자
502 리나 1381 펜
단계 규칙 결과
제1정규형 (1NF) 모든 필드가 단일 원자 값을 가지며, 중복 그룹이 없음 항목별 한 줄: 키 (order_id, item)
제2정규형 (2NF) 1NF이며, 비키 필드가 후보 키의 일부에만 의존하지 않음 customer이 order_id에만 의존하므로 주문 테이블로 이동; price이 item에만 의존하므로 품목 테이블로 이동
제3정규형 (3NF) 2NF이며, 비키 필드의 후보 키에 대한 전이 종속성이 없음 phone이 주문이 아닌 고객에 의존하므로 고객 테이블로 이동

결과: 3NF 상태

  • 고객(customer_id, name, phone)
  • 주문(order_id, customer_id)
  • OrderLine(order_id, item_id, quantity)
  • Item(item_id, description, price)

이제 Li Na의 전화번호는 한 번만 저장됩니다. 3NF에 대한 짧은 테스트입니다: 모든 비키 필드는 "키, 전체 키, 그리고 키 외에는 아무것도"를 의존합니다.

데이터 타입 선택

각 필드에는 type이 필요하며, 예로 INTEGER, VARCHAR(50)(최대 50 문자), DATE, BOOLEAN 또는 DECIMAL(6,2) 등이 있습니다. 전화번호는 정수가 아닌 텍스트로 저장됩니다. 이는 0로 시작할 수 있으며, 절대 합산되지 않기 때문입니다.

3.4

SQL

데이터 쿼리

SQL(Structured Query Language)은 관계형 데이터를 정의하고 쿼리합니다. 예제에서는 다음 테이블을 사용합니다:

Student
student_id name year_group
1 Ana 11
2 Ben 12
3 Chen 11
Book
book_id title author
10 Dune Herbert
11 Emma Austen
12 Holes Sachar
Loan
loan_id student_id book_id date_out
100 1 10 2026-09-01
101 1 12 2026-09-05
102 3 11 2026-09-06
SELECT name
FROM Student
WHERE year_group = 11
ORDER BY name DESC;

결과: 첸, 아나. WHERE 행 필터링; ORDER BY … DESC Z에서 A로 정렬.

SELECT Student.name, Book.title
FROM Loan
JOIN Student ON Loan.student_id = Student.student_id
JOIN Book ON Loan.book_id = Book.book_id;

결과: (아나, 더운), (아나, 홀스), (첸, 에마). 조인은 외래 키와 기본 키를 매칭하여 표를 결합합니다. 벤에는 대출이 없으므로 표시되지 않습니다.

SELECT student_id, COUNT(*) AS loans
FROM Loan
GROUP BY student_id;

결과: (1, 2), (3, 1). 집계 함수인 COUNT, SUM, AVG, MAX 및 MIN은 행 그룹에 대해 작동합니다.

구문 용도
WHERE 행 필터링: =, <>, >, LIKE 'D%', AND, OR
ORDER BY 정렬, ASC 또는 DESC
GROUP BY 집계 함수를 위한 그룹 생성
HAVING 그룹 필터링: HAVING COUNT(*) > 1

데이터 변경

INSERT INTO Book (book_id, title, author) VALUES (13, 'Wonder', 'Palacio');
UPDATE Student SET year_group = 12 WHERE student_id = 3;
DELETE FROM Loan WHERE loan_id = 100;

UPDATE 또는 DELETE에 WHERE을 추가하면 모든 행이 변경됩니다.

트랜잭션

트랜잭션은 모두 성공하거나 모두 실패해야 하는 일련의 작업으로, 예금 이송과 같습니다. 한 계좌에서 빼고 다른 계좌에 더하는 것입니다. 트랜잭션은 ACID 원칙을 따릅니다:

속성 의미
원자성 전체가 이루어지거나 전혀 이루어지지 않음
일관성 데이터베이스가 유효한 상태에서 다른 유효한 상태로 전환됨
격리성 동시에 실행되는 트랜잭션이 서로 간섭하지 않음
내구성 커밋된 후 변경 사항은 시스템 충돌에도 유지됨
탐색하기

One source row, several matches

Each source row contributes one result per matching record. A left join retains an unmatched source row as one NULL-matched row.

3.5

연습

  1. 학교 데이터를 단일 평면 파일에 저장할 때 발생할 수 있는 두 가지 문제를 설명하시오.
  2. 주요 키와 외부 키를 정의하고, 도서관 테이블에서 예시를 들시오.
  3. 학생과 책 간의 다대다 관계가 Loan 테이블을 필요로 하는 이유를 설명하시오.
  4. 한 테이블에는 필드 (booking_id, room, room_capacity, date)가 있습니다. 이것이 왜 3NF에 해당하지 않는지 설명하고 정규화하시오.
  5. 오스틴(Austen)이 쓴 모든 책의 제목을 나열하는 SQL을 작성하시오.
  6. 연도 11에 재적 중인 학생의 이름과 각 학생이 대출한 횟수를 나열하는 SQL을 작성하시오.
  7. 위 테이블에 대해 SELECT COUNT(*) FROM Loan WHERE book_id > 10;의 결과를 서술하시오.
  8. 책 12의 저자를 'L. Sachar'로 변경하는 SQL을 작성하십시오.
  9. 은행 이체 예시를 들어 원자성을 설명하십시오.

정답.

  1. 예: 데이터 중복, 같은 학생이 여러 행에 저장됨; 한 사본만 업데이트되고 나머지는 업데이트되지 않아 일관성 부족; 검색 또는 접근 제어 어려움.
  2. 기본 키는 각 기록을 고유하게 식별하며, 예로 Book의 book_id가 있습니다. 외래 키는 다른 테이블의 기본 키를 포함하는 필드로, 예로 Loan의 book_id가 있습니다.
  3. 한 학생이 많은 책을 빌리고 한 책을 많은 학생이 빌리는 관계입니다. relational table은 이를 직접 저장할 수 없으며, 연결 표는 이를 두 개의 일대다 관계로 변환하여 각 대출이 한 학생과 한 책을 연결합니다.
  4. room_capacity은 비키 필드인 room에 의존하므로 종속 종속성입니다. Booking(booking_id, room, date)과 Room(room, room_capacity)으로 분리합니다.
  5. SELECT title FROM Book WHERE author = 'Austen';
  6. (Ana, 2), (Chen, 1)를 제공하는 SELECT Student.name, COUNT(*) FROM Student JOIN Loan ON Student.student_id = Loan.student_id WHERE Student.year_group = 11 GROUP BY Student.name;.
  7. 대출 101(책 12) 및 102(책 11): 2.
  8. UPDATE Book SET author = 'L. Sachar' WHERE book_id = 12;
  9. 돈은 한 계좌에서 나가고 다른 계좌로 들어오아야 하며, 시스템이 중간에 실패하면 전체 거래가 취소되므로 돈이 분실되거나 생성되지 않습니다.
  10. 그래프 데이터베이스: 사람은 노드이고 친구 관계는 링크이므로 '지인의 지인'과 같은 쿼리는 링크를 따라 직접 수행됩니다.
  11. 예: 웨어하우스는 다양한 출처의 역사적 데이터를 보유하지만, 운영형 데이터베이스는 최신 데이터를 관리합니다. 웨어하우스는 대용량 분석 쿼리를 위한 읽기 위주로 사용되며, 운영형 데이터베이스는 작은 업데이트를 다수 처리합니다.
English 한국어
database/ˈdeɪtəbeɪs/ 데이터베이스
database management system/ˈdeɪtəbeɪs ˈmænɪdʒmənt ˈsɪstəm/ 데이터베이스 관리 시스템
data redundancy/ˈdeɪtə rɪˈdʌndənsi/ 데이터 중복성
inconsistency 데이터 불일치
relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ 관계 데이터베이스
table/ˈteɪbl/ 표
record/ˈrekɔːd/ 레코드
field/fiːld/ 필드
primary key/ˈpraɪməri kiː/ 주키
foreign key/ˈfɒrən kiː/ 외부 키
composite key/ˈkɒmpəzɪt kiː/ 복합 키
referential integrity/ˌrefəˈrenʃl ɪnˈteɡrɪti/ 참조 무결성
entity/ˈentɪti/ 개체
entity-relationship diagram/ˈentɪti rɪˈleɪʃənʃɪp ˈdaɪəɡræm/ 개체-관계도
link table/lɪŋk ˈteɪbl/ 연결표
normalisation/ˌnɔːməlaɪˈzeɪʃn/ 정규화
first normal form 제1정규형식
second normal form 제2정규형식
third normal form 제3정규형식
3.6

시험 팁

  • 키: 기본 키는 각 기록에 대해 유일해야 하며, 외래 키는 다른 테이블의 기본 키를 연결합니다.
  • 정렬화 답안에서는 제거하려는 종속성을 명시한 후, 새로운 테이블과 해당 키를 보여주세요.
  • SQL 키워드는 대문자로, 텍스트는 단일 따옴표로 감싸고 문장 끝에는 세미콜론을 넣으십시오.
  • 조인 시에는 항상 외래 키가 기본 키와 매칭되는 ON 조건을 제시하십시오.
  • UPDATE 및 DELETE 문장에서 WHERE 구문을 확인하십시오.
  • ACID를 일행 의미로 하는 네 단어로 암기하고 이체를 통해 예시하십시오.

국제바칼로레이트 · IB Diploma · Computer Science · SL 내 추가 주제

로그인 또는 계정 만들기

IGCSE, A-Level & AP