Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

정보처리기사 실기

🪑2. DB 생성 흐름 본문

🪑 독서실 자리관리 프로그램

🪑2. DB 생성 흐름

윤서입니다롱 2026. 6. 2. 10:03

독서실 자리관리 프로그램 DB 만들기

요구사항 분석을 끝냈다면 다음은 DB를 만들어야 합니다.

이번 독서실 자리관리 프로그램에서는 두 개의 테이블을 사용합니다.

tbl_learner
→ 학습자 정보 저장

tbl_studycafe
→ 독서실 자리 이용 정보 저장

즉 먼저 학습자 정보를 저장할 테이블을 만들고,
그 다음 독서실 자리 사용 정보를 저장할 테이블을 만듭니다.


1. 이번 문제에서 필요한 테이블 확인하기

이번 문제의 핵심 데이터는 다음과 같습니다.

학습자 정보
독서실 자리 사용 정보

따라서 필요한 테이블은 다음과 같습니다.

1. 학습자 테이블(tbl_learner)
2. 독서실 테이블(tbl_studycafe)

2. 학습자 테이블이 필요한 이유

문제에는 학습자별 이용료 조회 화면이 있습니다.

이 화면에서는 다음 정보가 출력됩니다.

학습자코드
이름
등급
이용시간
비용

여기서 학습자코드, 이름, 등급은 학습자 테이블에 저장됩니다.

그래서 먼저:

tbl_learner

테이블을 생성해야 합니다.


3. 학습자 테이블 명세서 해석하기

순서컬럼 ID컬럼명형태길이NULL비고

1 pk_learner 학습자 코드 VARCHAR2 5 NOT PRIMARY KEY
2 name 학습자 이름 VARCHAR2 20 NOT  
3 grade 학습자 등급 VARCHAR2 20    

여기서 가장 중요한 컬럼은:

pk_learner

입니다.

학습자 한 명을 구분하는 고유한 값이기 때문입니다.

예를 들어:

L0001 영희 학생
L0002 철수 학생

처럼 학습자를 구분합니다.


4. 학습자 테이블 생성하기

CREATE TABLE tbl_learner (
    pk_learner VARCHAR2(5) NOT NULL PRIMARY KEY,
    name       VARCHAR2(20) NOT NULL,
    grade      VARCHAR2(20)
);

이 코드는 학습자 정보를 저장할 표를 만드는 코드입니다.

쉽게 말하면 엑셀 표의 틀을 먼저 만드는 것입니다.


5. 독서실 테이블이 필요한 이유

독서실 자리관리 프로그램에서는 학습자가 언제, 어느 자리를 이용했는지 저장해야 합니다.

문제에서 자리현황 화면에는 다음 정보가 출력됩니다.

독서실코드
사용시간
가로위치
세로위치
학습자코드

따라서 독서실 자리 사용 정보를 저장할 테이블이 필요합니다.

그 테이블이:

tbl_studycafe

입니다.


6. 독서실 테이블 명세서 해석하기

순서컬럼 ID컬럼명형태길이NULL비고

1 pk_studycafe 독서실 코드 VARCHAR2 5 NOT PRIMARY KEY
2 usage_date_start 사용 시간 시작일 DATE - NOT  
3 usage_date_end 사용 시간 종료일 DATE - NOT  
4 seat_x 자리 가로위치 NUMBER 2 NOT  
5 seat_y 자리 세로위치 NUMBER 2 NOT  
6 fk_learner 학습자 코드 VARCHAR2 5 NOT FOREIGN KEY

여기서 중요한 점은 fk_learner입니다.

독서실 이용 기록은 반드시 어떤 학습자가 사용했는지 알아야 합니다.

그래서 tbl_studycafe의 fk_learner가
tbl_learner의 pk_learner를 참조합니다.


7. 독서실 테이블 생성하기

CREATE TABLE tbl_studycafe (
    pk_studycafe     VARCHAR2(5) NOT NULL PRIMARY KEY,
    usage_date_start DATE NOT NULL,
    usage_date_end   DATE NOT NULL,
    seat_x           NUMBER(2) NOT NULL,
    seat_y           NUMBER(2) NOT NULL,
    fk_learner       VARCHAR2(5) NOT NULL,

    CONSTRAINT fk_studycafe_learner
        FOREIGN KEY (fk_learner)
        REFERENCES tbl_learner(pk_learner)
);

이 코드는 독서실 자리 이용 정보를 저장할 테이블을 생성합니다.


8. FOREIGN KEY가 필요한 이유

현재 tbl_studycafe에는 fk_learner가 있습니다.

예를 들어:

00001 | 2025-04-20 10:00 | 2025-04-20 16:00 | 9 | 4 | L0001

이 데이터는:

L0001 학습자가
2025-04-20 10시부터 16시까지
가로 9, 세로 4 자리를 사용했다

는 의미입니다.

그런데 만약 존재하지 않는 학습자코드인:

L9999

가 들어가면 문제가 생깁니다.

그래서 외래키를 설정합니다.

FOREIGN KEY (fk_learner)
REFERENCES tbl_learner(pk_learner)

이 뜻은:

fk_learner 값은 반드시 tbl_learner의 pk_learner에 존재해야 한다

입니다.


9. DROP TABLE을 먼저 작성하는 이유

실습을 반복하면 이미 같은 이름의 테이블이 존재할 수 있습니다.

그 상태에서 다시 CREATE TABLE을 실행하면 오류가 납니다.

그래서 SQL 파일 맨 위에 기존 테이블 삭제 코드를 작성합니다.

DROP TABLE tbl_studycafe CASCADE CONSTRAINTS;
DROP TABLE tbl_learner CASCADE CONSTRAINTS;

삭제 순서는 중요합니다.

tbl_studycafe가 tbl_learner를 참조하고 있기 때문에
자식 테이블인 tbl_studycafe를 먼저 삭제합니다.


10. 학습자 데이터 입력하기

테이블을 만들었다면 문제에서 제공한 데이터를 입력합니다.

INSERT INTO tbl_learner VALUES ('L0001', '영희', '학생');
INSERT INTO tbl_learner VALUES ('L0002', '철수', '학생');
INSERT INTO tbl_learner VALUES ('L0003', '은희', '학생');
INSERT INTO tbl_learner VALUES ('L0004', '지훈', '직장인');
INSERT INTO tbl_learner VALUES ('L0005', '지은', '직장인');

여기서 VALUES 안의 순서는 테이블 생성 순서와 같아야 합니다.

현재 tbl_learner는:

pk_learner
name
grade

순서로 만들었기 때문에 INSERT도 같은 순서로 입력합니다.


11. 독서실 이용 데이터 입력하기

독서실 이용 데이터는 날짜와 시간이 포함되어 있습니다.

Oracle에서 날짜와 시간을 안전하게 입력하려면 TO_DATE()를 사용하는 것이 좋습니다.

예를 들어:

TO_DATE('2025-04-20 10:00:00', 'YYYY-MM-DD HH24:MI:SS')

는 문자 데이터를 날짜 데이터로 바꾸는 코드입니다.


12. 독서실 이용 데이터 INSERT

INSERT INTO tbl_studycafe VALUES ('00001', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');
INSERT INTO tbl_studycafe VALUES ('00002', TO_DATE('2025-04-21 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-21 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');
INSERT INTO tbl_studycafe VALUES ('00003', TO_DATE('2025-04-22 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-22 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');
INSERT INTO tbl_studycafe VALUES ('00004', TO_DATE('2025-04-23 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-23 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');
INSERT INTO tbl_studycafe VALUES ('00005', TO_DATE('2025-04-24 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-24 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');

INSERT INTO tbl_studycafe VALUES ('00006', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');
INSERT INTO tbl_studycafe VALUES ('00007', TO_DATE('2025-04-21 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-21 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');
INSERT INTO tbl_studycafe VALUES ('00008', TO_DATE('2025-04-22 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-22 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');
INSERT INTO tbl_studycafe VALUES ('00009', TO_DATE('2025-04-23 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-23 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');
INSERT INTO tbl_studycafe VALUES ('00010', TO_DATE('2025-04-24 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-24 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');

INSERT INTO tbl_studycafe VALUES ('00011', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');
INSERT INTO tbl_studycafe VALUES ('00012', TO_DATE('2025-04-21 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-21 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');
INSERT INTO tbl_studycafe VALUES ('00013', TO_DATE('2025-04-22 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-22 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');
INSERT INTO tbl_studycafe VALUES ('00014', TO_DATE('2025-04-23 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-23 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');
INSERT INTO tbl_studycafe VALUES ('00015', TO_DATE('2025-04-24 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-24 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');

INSERT INTO tbl_studycafe VALUES ('00016', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');
INSERT INTO tbl_studycafe VALUES ('00017', TO_DATE('2025-04-21 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-21 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');
INSERT INTO tbl_studycafe VALUES ('00018', TO_DATE('2025-04-22 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-22 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');
INSERT INTO tbl_studycafe VALUES ('00019', TO_DATE('2025-04-23 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-23 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');
INSERT INTO tbl_studycafe VALUES ('00020', TO_DATE('2025-04-24 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-24 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');

INSERT INTO tbl_studycafe VALUES ('00021', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 7, 'L0005');

COMMIT;

13. 데이터 확인하기

테이블 생성과 데이터 입력이 끝났다면 반드시 확인합니다.

SELECT * FROM tbl_learner;
SELECT * FROM tbl_studycafe;

또는 건수로 확인할 수도 있습니다.

SELECT COUNT(*) FROM tbl_learner;
SELECT COUNT(*) FROM tbl_studycafe;

정상적으로 입력되었다면:

tbl_learner → 5건
tbl_studycafe → 21건

이 나와야 합니다.


14. 전체 db.sql 코드

아래 코드를 db.sql에 작성하고 실행하면 됩니다.

DROP TABLE tbl_studycafe CASCADE CONSTRAINTS;
DROP TABLE tbl_learner CASCADE CONSTRAINTS;

CREATE TABLE tbl_learner (
    pk_learner VARCHAR2(5) NOT NULL PRIMARY KEY,
    name       VARCHAR2(20) NOT NULL,
    grade      VARCHAR2(20)
);

CREATE TABLE tbl_studycafe (
    pk_studycafe     VARCHAR2(5) NOT NULL PRIMARY KEY,
    usage_date_start DATE NOT NULL,
    usage_date_end   DATE NOT NULL,
    seat_x           NUMBER(2) NOT NULL,
    seat_y           NUMBER(2) NOT NULL,
    fk_learner       VARCHAR2(5) NOT NULL,

    CONSTRAINT fk_studycafe_learner
        FOREIGN KEY (fk_learner)
        REFERENCES tbl_learner(pk_learner)
);

INSERT INTO tbl_learner VALUES ('L0001', '영희', '학생');
INSERT INTO tbl_learner VALUES ('L0002', '철수', '학생');
INSERT INTO tbl_learner VALUES ('L0003', '은희', '학생');
INSERT INTO tbl_learner VALUES ('L0004', '지훈', '직장인');
INSERT INTO tbl_learner VALUES ('L0005', '지은', '직장인');

INSERT INTO tbl_studycafe VALUES ('00001', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');
INSERT INTO tbl_studycafe VALUES ('00002', TO_DATE('2025-04-21 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-21 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');
INSERT INTO tbl_studycafe VALUES ('00003', TO_DATE('2025-04-22 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-22 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');
INSERT INTO tbl_studycafe VALUES ('00004', TO_DATE('2025-04-23 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-23 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');
INSERT INTO tbl_studycafe VALUES ('00005', TO_DATE('2025-04-24 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-24 16:00:00','YYYY-MM-DD HH24:MI:SS'), 9, 4, 'L0001');

INSERT INTO tbl_studycafe VALUES ('00006', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');
INSERT INTO tbl_studycafe VALUES ('00007', TO_DATE('2025-04-21 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-21 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');
INSERT INTO tbl_studycafe VALUES ('00008', TO_DATE('2025-04-22 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-22 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');
INSERT INTO tbl_studycafe VALUES ('00009', TO_DATE('2025-04-23 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-23 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');
INSERT INTO tbl_studycafe VALUES ('00010', TO_DATE('2025-04-24 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-24 16:00:00','YYYY-MM-DD HH24:MI:SS'), 3, 4, 'L0002');

INSERT INTO tbl_studycafe VALUES ('00011', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');
INSERT INTO tbl_studycafe VALUES ('00012', TO_DATE('2025-04-21 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-21 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');
INSERT INTO tbl_studycafe VALUES ('00013', TO_DATE('2025-04-22 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-22 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');
INSERT INTO tbl_studycafe VALUES ('00014', TO_DATE('2025-04-23 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-23 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');
INSERT INTO tbl_studycafe VALUES ('00015', TO_DATE('2025-04-24 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-24 20:00:00','YYYY-MM-DD HH24:MI:SS'), 6, 5, 'L0003');

INSERT INTO tbl_studycafe VALUES ('00016', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');
INSERT INTO tbl_studycafe VALUES ('00017', TO_DATE('2025-04-21 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-21 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');
INSERT INTO tbl_studycafe VALUES ('00018', TO_DATE('2025-04-22 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-22 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');
INSERT INTO tbl_studycafe VALUES ('00019', TO_DATE('2025-04-23 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-23 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');
INSERT INTO tbl_studycafe VALUES ('00020', TO_DATE('2025-04-24 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-24 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 9, 'L0004');

INSERT INTO tbl_studycafe VALUES ('00021', TO_DATE('2025-04-20 10:00:00','YYYY-MM-DD HH24:MI:SS'), TO_DATE('2025-04-20 20:00:00','YYYY-MM-DD HH24:MI:SS'), 7, 7, 'L0005');

COMMIT;

SELECT * FROM tbl_learner;
SELECT * FROM tbl_studycafe;

15. 오늘 사용한 SQL 문법 정리

문법역할

DROP TABLE 기존 테이블 삭제
CREATE TABLE 새 테이블 생성
VARCHAR2 문자 데이터 저장
NUMBER 숫자 데이터 저장
DATE 날짜와 시간 저장
NOT NULL 반드시 값 입력
PRIMARY KEY 기본키
FOREIGN KEY 외래키
REFERENCES 참조할 테이블 지정
INSERT INTO 데이터 입력
TO_DATE 문자 데이터를 날짜로 변환
COMMIT 저장
SELECT * FROM 전체 데이터 조회

16. 핵심 정리

이번 단계에서는 화면을 만들기 전에 DB를 먼저 준비했습니다.

정리하면:

tbl_learner
→ 학습자 정보 저장

tbl_studycafe
→ 독서실 자리 이용 정보 저장

tbl_studycafe.fk_learner
→ tbl_learner.pk_learner 참조

즉 독서실 자리 이용 기록은 반드시 학습자 정보와 연결되어야 합니다.

다음 단계에서는 index.jsp를 작성하여
독서실 자리관리 프로그램의 전체 화면 틀을 만들어보겠습니다.