목차
관계형 데이터베이스(RDB) 기초 정리 (PostgreSQL 기준)
관계형 데이터베이스(Relational Database, RDB)는 데이터를 테이블(Table) 구조로 정리하고, 테이블 간의 관계(Relationship)를 통해 효율적으로 데이터를 관리하고 검색할 수 있는 시스템입니다. 이 글에서는 대표적인 오픈소스 RDB인 PostgreSQL을 기준으로 기본 개념과 문법을 정리합니다.
1. 기본 개념
개념설명
테이블 (Table) | 데이터를 행(Row)과 열(Column)로 저장하는 구조. 하나의 테이블은 하나의 주제나 엔티티를 나타냅니다. |
열 (Column) | 속성(Attribute)을 나타내며, 각 열은 고유한 이름과 데이터 타입을 가집니다. |
행 (Row) | 하나의 레코드(Record)로, 테이블의 실제 데이터를 구성합니다. |
기본 키 (Primary Key) | 각 행을 고유하게 식별하는 열. 중복 불가, NULL 불가. 테이블당 하나만 존재 가능. |
외래 키 (Foreign Key) | 다른 테이블의 기본 키를 참조하는 열. 테이블 간 관계를 표현하고 무결성 유지. |
관계 (Relationship) | 테이블 간 논리적 연결. - 1:1: 각 레코드가 하나의 관련 레코드만 가짐 - 1:N: 한 레코드가 여러 레코드와 관계 - N:M: 여러 레코드가 다수와 관계 (중간 테이블 사용) |
스키마 (Schema) | 데이터베이스의 구조를 정의하는 청사진. 테이블, 열, 관계, 제약조건 등을 포함. |
2. 기본 문법 (DDL - Data Definition Language)
📌 테이블 생성
sql
CREATE TABLE 테이블이름 ( 열이름 데이터타입 [제약조건], ... PRIMARY KEY (기본키열), FOREIGN KEY (외래키열) REFERENCES 참조테이블(참조열) [ON DELETE 옵션] [ON UPDATE 옵션] );
자주 사용하는 데이터 타입 예시:
CREATE TABLE 테이블이름 (
열이름 데이터타입 [제약조건],
...
PRIMARY KEY (기본키열),
FOREIGN KEY (외래키열) REFERENCES 참조테이블(참조열)
[ON DELETE 옵션] [ON UPDATE 옵션]
);
- INTEGER, VARCHAR(n), TEXT
- DATE, TIMESTAMP
- BOOLEAN
제약 조건:
- NOT NULL: NULL 불가
- UNIQUE: 고유 값
- PRIMARY KEY: 기본 키
- FOREIGN KEY: 외래 키
- CHECK (조건): 조건 만족 시 입력 가능
- DEFAULT 값: 기본값 설정
예시:
sql
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
registration_date TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
📌 테이블 수정
sql
ALTER TABLE 테이블이름
ADD COLUMN 열이름 데이터타입 [제약조건];
ALTER TABLE 테이블이름
DROP COLUMN 열이름;
ALTER TABLE 테이블이름
RENAME TO 새테이블이름;
예시 (컬럼 추가):
sql
ALTER TABLE users
ADD COLUMN nickname VARCHAR(50) UNIQUE;
📌 테이블 삭제
sql
DROP TABLE 테이블이름 [CASCADE | RESTRICT];
📌 스키마 생성 및 삭제
sql
CREATE SCHEMA 스키마이름; DROP SCHEMA 스키마이름 [CASCADE | RESTRICT];
3. 테이블 간 관계 설정
🔹 1:N 관계 예시 (게시판 - 게시글)
sql
CREATE TABLE boards (
board_id SERIAL PRIMARY KEY,
board_name VARCHAR(100) UNIQUE NOT NULL
);
CREATE TABLE posts (
post_id SERIAL PRIMARY KEY,
board_id INTEGER NOT NULL,
title VARCHAR(200) NOT NULL,
content TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (board_id) REFERENCES boards(board_id) ON DELETE CASCADE
);
🔹 사용자와 게시글의 관계 추가 (1:N)
sql
ALTER TABLE posts
ADD COLUMN user_id INTEGER NOT NULL REFERENCES users(user_id) ON DELETE CASCADE;
🔹 게시글과 댓글 관계 (1:N)
sql
CREATE TABLE comments (
comment_id SERIAL PRIMARY KEY,
post_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (post_id) REFERENCES posts(post_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);
🔹 N:M 관계 예시 (사용자 - 권한)
sql
CREATE TABLE roles (
role_id SERIAL PRIMARY KEY,
role_name VARCHAR(50) UNIQUE NOT NULL
);
CREATE TABLE user_roles (
user_id INTEGER NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,
role_id INTEGER NOT NULL REFERENCES roles(role_id) ON DELETE CASCADE,
PRIMARY KEY (user_id, role_id)
);
4. 추가 개념
개념설명
데이터 타입 | 열에 저장할 수 있는 데이터 종류 정의. 사용 예: INTEGER, TEXT, BOOLEAN, TIMESTAMP 등 |
인덱스 (Index) | 빠른 검색을 위한 구조. 생성: CREATE INDEX, 삭제: DROP INDEX |
트랜잭션 (Transaction) | 데이터 일관성을 위한 단위 작업. BEGIN, COMMIT, ROLLBACK |
뷰 (View) | 복잡한 쿼리를 단순화하는 가상 테이블. CREATE VIEW, DROP VIEW |
함수/프로시저 | 반복 작업을 위한 재사용 가능한 코드 블록. CREATE FUNCTION, CREATE PROCEDURE |

'node.js' 카테고리의 다른 글
InfluxDB, Redis, MQTT 정리 (0) | 2025.04.18 |
---|---|
express 에러 코드 정리 (0) | 2025.04.10 |
2025-04-09 익스프레스 실습(로그인, 회원가입) (0) | 2025.04.09 |
2025-04-09 TIL - 1 (0) | 2025.04.09 |
multer (0) | 2025.04.09 |
관계형 데이터베이스(RDB) 기초 정리 (PostgreSQL 기준)
관계형 데이터베이스(Relational Database, RDB)는 데이터를 테이블(Table) 구조로 정리하고, 테이블 간의 관계(Relationship)를 통해 효율적으로 데이터를 관리하고 검색할 수 있는 시스템입니다. 이 글에서는 대표적인 오픈소스 RDB인 PostgreSQL을 기준으로 기본 개념과 문법을 정리합니다.
1. 기본 개념
개념설명
테이블 (Table) | 데이터를 행(Row)과 열(Column)로 저장하는 구조. 하나의 테이블은 하나의 주제나 엔티티를 나타냅니다. |
열 (Column) | 속성(Attribute)을 나타내며, 각 열은 고유한 이름과 데이터 타입을 가집니다. |
행 (Row) | 하나의 레코드(Record)로, 테이블의 실제 데이터를 구성합니다. |
기본 키 (Primary Key) | 각 행을 고유하게 식별하는 열. 중복 불가, NULL 불가. 테이블당 하나만 존재 가능. |
외래 키 (Foreign Key) | 다른 테이블의 기본 키를 참조하는 열. 테이블 간 관계를 표현하고 무결성 유지. |
관계 (Relationship) | 테이블 간 논리적 연결. - 1:1: 각 레코드가 하나의 관련 레코드만 가짐 - 1:N: 한 레코드가 여러 레코드와 관계 - N:M: 여러 레코드가 다수와 관계 (중간 테이블 사용) |
스키마 (Schema) | 데이터베이스의 구조를 정의하는 청사진. 테이블, 열, 관계, 제약조건 등을 포함. |
2. 기본 문법 (DDL - Data Definition Language)
📌 테이블 생성
sql
CREATE TABLE 테이블이름 ( 열이름 데이터타입 [제약조건], ... PRIMARY KEY (기본키열), FOREIGN KEY (외래키열) REFERENCES 참조테이블(참조열) [ON DELETE 옵션] [ON UPDATE 옵션] );
자주 사용하는 데이터 타입 예시:
CREATE TABLE 테이블이름 (
열이름 데이터타입 [제약조건],
...
PRIMARY KEY (기본키열),
FOREIGN KEY (외래키열) REFERENCES 참조테이블(참조열)
[ON DELETE 옵션] [ON UPDATE 옵션]
);
- INTEGER, VARCHAR(n), TEXT
- DATE, TIMESTAMP
- BOOLEAN
제약 조건:
- NOT NULL: NULL 불가
- UNIQUE: 고유 값
- PRIMARY KEY: 기본 키
- FOREIGN KEY: 외래 키
- CHECK (조건): 조건 만족 시 입력 가능
- DEFAULT 값: 기본값 설정
예시:
sql
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
registration_date TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
📌 테이블 수정
sql
ALTER TABLE 테이블이름
ADD COLUMN 열이름 데이터타입 [제약조건];
ALTER TABLE 테이블이름
DROP COLUMN 열이름;
ALTER TABLE 테이블이름
RENAME TO 새테이블이름;
예시 (컬럼 추가):
sql
ALTER TABLE users
ADD COLUMN nickname VARCHAR(50) UNIQUE;
📌 테이블 삭제
sql
DROP TABLE 테이블이름 [CASCADE | RESTRICT];
📌 스키마 생성 및 삭제
sql
CREATE SCHEMA 스키마이름; DROP SCHEMA 스키마이름 [CASCADE | RESTRICT];
3. 테이블 간 관계 설정
🔹 1:N 관계 예시 (게시판 - 게시글)
sql
CREATE TABLE boards (
board_id SERIAL PRIMARY KEY,
board_name VARCHAR(100) UNIQUE NOT NULL
);
CREATE TABLE posts (
post_id SERIAL PRIMARY KEY,
board_id INTEGER NOT NULL,
title VARCHAR(200) NOT NULL,
content TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (board_id) REFERENCES boards(board_id) ON DELETE CASCADE
);
🔹 사용자와 게시글의 관계 추가 (1:N)
sql
ALTER TABLE posts
ADD COLUMN user_id INTEGER NOT NULL REFERENCES users(user_id) ON DELETE CASCADE;
🔹 게시글과 댓글 관계 (1:N)
sql
CREATE TABLE comments (
comment_id SERIAL PRIMARY KEY,
post_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (post_id) REFERENCES posts(post_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);
🔹 N:M 관계 예시 (사용자 - 권한)
sql
CREATE TABLE roles (
role_id SERIAL PRIMARY KEY,
role_name VARCHAR(50) UNIQUE NOT NULL
);
CREATE TABLE user_roles (
user_id INTEGER NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,
role_id INTEGER NOT NULL REFERENCES roles(role_id) ON DELETE CASCADE,
PRIMARY KEY (user_id, role_id)
);
4. 추가 개념
개념설명
데이터 타입 | 열에 저장할 수 있는 데이터 종류 정의. 사용 예: INTEGER, TEXT, BOOLEAN, TIMESTAMP 등 |
인덱스 (Index) | 빠른 검색을 위한 구조. 생성: CREATE INDEX, 삭제: DROP INDEX |
트랜잭션 (Transaction) | 데이터 일관성을 위한 단위 작업. BEGIN, COMMIT, ROLLBACK |
뷰 (View) | 복잡한 쿼리를 단순화하는 가상 테이블. CREATE VIEW, DROP VIEW |
함수/프로시저 | 반복 작업을 위한 재사용 가능한 코드 블록. CREATE FUNCTION, CREATE PROCEDURE |

'node.js' 카테고리의 다른 글
InfluxDB, Redis, MQTT 정리 (0) | 2025.04.18 |
---|---|
express 에러 코드 정리 (0) | 2025.04.10 |
2025-04-09 익스프레스 실습(로그인, 회원가입) (0) | 2025.04.09 |
2025-04-09 TIL - 1 (0) | 2025.04.09 |
multer (0) | 2025.04.09 |