이 배움 자료는 2027년 처음 평가된 과정의 주제 A3, 데이터베이스를 다룹니다: 관계형 데이터베이스, 설계 및 정규화, 그리고 SQL.
선행 지식: B2의 데이터 유형(정수, 문자열, 부울리안, 실수).
국제바칼로레이트 · IB Diploma · Computer Science · SL · 주제 3
4:23
데이터베이스
학교 도서관은 대출 기록을 하나의 스프레드시트에 보관한다. 각 행에는 학생 이름, 학급, 도서명, 날짜가 포함된다. 학생이 학급을 변경할 때, 수십 개의 행이…
영어 내레이션 · 영어 + 중국어 자막 burned-in
이 배움 자료는 2027년 처음 평가된 과정의 주제 A3, 데이터베이스를 다룹니다: 관계형 데이터베이스, 설계 및 정규화, 그리고 SQL.
선행 지식: B2의 데이터 유형(정수, 문자열, 부울리안, 실수).
| English | 한국어 |
|---|---|
| SQL/ˌes kjuː ˈel/ | SQL |
한 학교 도서관이 한 스프레드시트에 대출 기록을 보관한다: 각 행에는 학생 이름, 학급, 도서 제목 및 저자, 날짜가 포함된다. 학생이 학급이 변경되면 수십 개의 행을 수정해야 하며, 일부는 누락된다. 두 행이 동일한 학생에 대해 서로 다른 정보를 가진다. 데이터베이스는 이러한 문제를 방지하기 위해 설계되었다.
데이터베이스는 체계적으로 정리된 데이터의 집합이다. 데이터베이스 관리 시스템(DBMS)은 이를 저장하고, 쿼리를 실행하며, 접근을 통제하고 백업을 수행하는 소프트웨어이다.
| 평면 파일의 문제점 | 관계형 데이터베이스의 해결 방안 |
|---|---|
| 데이터 중복: 동일한 데이터가 여러 번 저장됨 | 각 사실은 한 번만 저장됨 |
| 일관성 부족: 복사본 간 정보 불일치 | 단일 복사본으로 불일치 가능성 없음 |
| 검색 및 결합이 어려움 | SQL 쿼리로 테이블을 조인함 |
| 사용자별 조회 권한 제어 불가 | 사용자 계정 및 권한 설정 |
관계형 데이터베이스는 테이블(관계) 형태로 데이터를 저장한다. 각 레코드(행)는 하나의 항목이며, 각 필드( 열, 속성)는 하나의 성질을 나타낸다.
| 키 | 의미 | 예시 |
|---|---|---|
| 주요 키 | 모든 레코드에서 값이 고유한 필드 | student_id |
| 외부 키 | 다른 테이블의 주요 키를 가져와 두 테이블을 연결하는 필드 | Loan의 student_id |
| 복합 키 | 두 개 이상의 필드로 구성된 주요 키 | (order_id, item_id) |
참조 무결성은 비공백 외부 키가 참조되는 키(주요 키 또는 기타 적절한 고유 키)와 일치함을 요구하며, 공백 허용 외부 키는 특정 참조가 없음을 나타낼 수 있다: 존재하지 않는 학생을 인용할 수 없는 대출 기록은 허용되지 않는다.
| English | 한국어 |
|---|---|
| join/dʒɔɪn/ | 조인 |
| aggregate function/ˈæɡrɪɡeɪt ˈfʌŋkʃn/ | 집계 함수 |
| transaction/trænˈsækʃn/ | 트랜잭션 |
개체는 데이터를 저장하는 대상입니다: 학생, 책 등. 개체-관계도(ERD)는 개체와 그들 간의 관계를 보여줍니다.

| 관계 | 의미 | 예시 |
|---|---|---|
| 일대일 | 각 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 상태
이제 Li Na의 전화번호는 한 번만 저장됩니다. 3NF에 대한 짧은 테스트입니다: 모든 비키 필드는 "키, 전체 키, 그리고 키 외에는 아무것도"를 의존합니다.
각 필드에는 type이 필요하며, 예로 INTEGER, VARCHAR(50)(최대 50 문자), DATE, BOOLEAN 또는 DECIMAL(6,2) 등이 있습니다. 전화번호는 정수가 아닌 텍스트로 저장됩니다. 이는 0로 시작할 수 있으며, 절대 합산되지 않기 때문입니다.
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 원칙을 따릅니다:
| 속성 | 의미 |
|---|---|
| 원자성 | 전체가 이루어지거나 전혀 이루어지지 않음 |
| 일관성 | 데이터베이스가 유효한 상태에서 다른 유효한 상태로 전환됨 |
| 격리성 | 동시에 실행되는 트랜잭션이 서로 간섭하지 않음 |
| 내구성 | 커밋된 후 변경 사항은 시스템 충돌에도 유지됨 |
Each source row contributes one result per matching record. A left join retains an unmatched source row as one NULL-matched row.
booking_id, room, room_capacity, date)가 있습니다. 이것이 왜 3NF에 해당하지 않는지 설명하고 정규화하시오.SELECT COUNT(*) FROM Loan WHERE book_id > 10;의 결과를 서술하시오.정답.
book_id가 있습니다. 외래 키는 다른 테이블의 기본 키를 포함하는 필드로, 예로 Loan의 book_id가 있습니다.room_capacity은 비키 필드인 room에 의존하므로 종속 종속성입니다. Booking(booking_id, room, date)과 Room(room, room_capacity)으로 분리합니다.SELECT title FROM Book WHERE author = 'Austen';SELECT Student.name, COUNT(*) FROM Student JOIN Loan ON Student.student_id = Loan.student_id WHERE Student.year_group = 11 GROUP BY Student.name;.UPDATE Book SET author = 'L. Sachar' WHERE book_id = 12;| 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정규형식 |
ON 조건을 제시하십시오.UPDATE 및 DELETE 문장에서 WHERE 구문을 확인하십시오.