우리 지금까지 배운 거 잠깐 정리하고 넘어가자. 진짜 하나씩 차근차근 다 짚어볼 거야. 앞으로 배울 내용도 다 이거 바탕이니까, 각 명령어가 뭘 하는지 완전하게 이해하고 있으면 좋아.
학생이랑 강의 예시로 다시 한 번 처음부터 끝까지 해볼게. 테이블 만드는 것부터 각 단계에서 무슨 일이 일어나는지까지 다 볼 거야. 준비됐지?
이제 students 테이블을 만들어서 학생 정보를 저장하고, courses 테이블이랑 외래 키로 연결해볼 거야. 이 과정에서 외래 키가 엔터티 사이 관계를 어떻게 모델링하는지 볼 수 있어.
students 테이블 만들기
students 테이블은 학생의 고유 아이디, 이름, 생년월일을 저장할 거야. CREATE TABLE 명령어로 만들어볼게.
CREATE TABLE students (
student_id SERIAL PRIMARY KEY, -- 각 레코드의 고유 키
name TEXT NOT NULL, -- 학생 이름 (필수)
birth_date DATE -- 학생 생년월일
);
여기서 무슨 일이 일어나냐면?
student_id SERIAL PRIMARY KEY: 이건 각 학생의 고유 아이디야.SERIAL타입은 자동 증가 필드고,PRIMARY KEY는 각 행마다 유일하게 만들어줘.name TEXT NOT NULL: 학생 이름 저장하는 필드야.NOT NULL로 해놔서 이름 없이 레코드 추가 못 해.birth_date DATE: 생년월일 저장하는 필드.DATE타입이라 날짜 다루기 좋아.
만약 테이블이 사람이라면 student_id는 여권 번호, name은 이름, birth_date는 가끔 숨기고 싶은 생일 같은 거지. 근데 DB에선 다 중요해!
courses 테이블 만들기
이번엔 강의 정보를 저장할 테이블을 만들어볼게. 강의 아이디, 제목, 설명이 들어갈 거야.
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY, -- 강의 고유 아이디
title TEXT NOT NULL, -- 강의 제목 (필수)
description TEXT -- 강의 설명
);
여기서 무슨 일이 일어나냐면?
course_id SERIAL PRIMARY KEY: 이것도 자동 증가 필드로, 각 강의마다 고유 아이디를 만들어줘.title TEXT NOT NULL: 강의 제목 저장하는 필드.NOT NULL로 해놔서 이름 없는 강의는 못 만들어.description TEXT: 강의 설명 저장하는 필드. 이건 옵션이라 비워도 돼 (NOT NULL없음).
제목 없는 강의는 표지 없는 책이랑 똑같아. 근데 DB는 그걸 허락 안 해!
students 테이블이랑 courses 테이블 연결하기
이제 각 학생이 한 강의에만 등록된다고 해보자. 그러면 courses 테이블에 외래 키를 추가해서 students 테이블의 아이디를 참조하게 만들 거야.
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY, -- 강의 고유 아이디
title TEXT NOT NULL, -- 강의 제목 (필수)
description TEXT, -- 강의 설명
student_id INT REFERENCES students(student_id) -- students 테이블과 연결하는 외래 키
);
student_id INT REFERENCES students(student_id)가 뭐 하는 거냐면?
student_id필드를 만들어서students테이블의student_id를 참조하게 해.- 테이블 간 연결은
REFERENCES키워드로 해줘. - 즉,
courses에 데이터 넣을 때student_id값이students에 실제로 있어야 해. 만약 없는student_id로 강의 등록하려고 하면 에러 나와.
테이블에 데이터 넣기
테이블 다 만들었으니까 이제 학생이랑 강의 좀 넣어보자. 아무도 없는 강의실은 심심하잖아?
학생 추가하기
INSERT INTO students (name, birth_date) VALUES
('Alex Lin', '2000-05-10'),
('Maria Chi', '1998-02-15'),
('Otto Song', '2001-09-25');
강의 추가하기
INSERT INTO courses (title, description, student_id) VALUES
('SQL 기초', 'SQL 기본 문법 배우기', 1),
('관계형 데이터베이스', '관계형 모델 이해하기', 2),
('PostgreSQL 입문', 'PostgreSQL 설치 및 설정', 3);
각 강의에 student_id를 지정해서 students 테이블의 학생이랑 연결했어.
테이블 연결 확인하기
이제 진짜로 테이블이 연결됐는지 확인해보자. 강의 정보랑 학생 이름을 같이 보여주는 쿼리를 만들어볼게.
SELECT
courses.title AS course_title,
courses.description AS course_description,
students.name AS student_name
FROM
courses
JOIN
students ON courses.student_id = students.student_id;
예시 결과: 쿼리 결과:
| course_title | course_description | student_name |
|---|---|---|
| SQL 기초 | SQL 기본 문법 배우기 | Alex Lin |
| 관계형 데이터베이스 | 관계형 모델 이해하기 | Maria Chi |
| PostgreSQL 입문 | PostgreSQL 설치 및 설정 | Otto Song |
외래 키로 강의랑 학생을 연결했으니까, 이제 한 번에 관련된 데이터 다 뽑아올 수 있어. 이게 바로 관계형 모델의 힘이지!
요약
지금까지 한 거 다 이해됐지? 앞으로 더 나아갈 거니까, 지금 배운 거 확실히 알고 있으면 좋아!
GO TO FULL VERSION