카테캠

[카테캠] 프리코스 1주 5일차 - DB와 SQL 기초

wlsgk7779 2026. 5. 29. 00:52

1. 데이터베이스 소개

데이터 : 현실 세계에서 수집된 단순한 사실과 값정보 : 데이터를 특정 목적에 의해 해석하거나 가공한 형태

 

데이터베이스의 정의데이터들의 집합.한 조직 안에서 여러 사용자와 응용 프로그램이 공동으로 사용하는 데이터들을통합하여 저장하고 운영하는 데이터

 

▶데이터베이스의 필요성

파일처리 시스템 : 각 프로그램이 자기만의 파일을 직접 만들어서 데이터를 저장하고 관리하는 방식

파일처리 시스템의 한계 

- 데이터 종속의 문제 : 데이터의 구조가 바뀌면 그걸 사용하는 응용 프로그램의 구조도 바뀌어야 함

- 데이터 중복의 문제 : 응용 프로그램 별로 데이터를 생성할 수도 있는데 이때 데이터가 중복될 수 있음

- 데이터 무결성 문제 : 중복으로 저장되어 있으니, 김민준 이라는 학생의 정보가 바뀌면 모두 바꿔줘야함

 

▶데이터베이스의 특징

- 실시간 접근성 : 사용자가 원할 때 언제든지 접근가능해야함

- 지속적인 변화 : 데이터 삽입, 삭제, 갱신을 통해 최신 데이터를 유지해야함

- 동시 공유 : 여러 사용자가 동시에 이용할 수 있어야 함

- 내용에 대한 참조 : 데이터가 저장된 물리적 위치가 아닌 값을 가지고 검색할 수 있어야 함

 

2. 데이터베이스의 종류

▶RDB와 NoSQL

RDB와 NoSQL의 핵심적인 차이는 "관계"이다.

 

▷RDB (Relational DataBase) :

- 관계형 모델을 기반으로 SQL을 이용해 데이터를 관리함

 

▷NoSQL (Not only SQL) :

- 데이터 간 관계를 정의하지 않고, 그래서 RDB보다는 유연한 모델을 이용

 

▶관계형 데이터베이스 (RDB)

- 데이터를 행과 열을 가지는 테이블로 표현한다.

- 테이블 간의 관계를 이용해서 데이터를 효과적으로 관리해 무결성을 보장

- 정의된 테이블(스키마)에 맞게 데이터가 삽입되므로 데이터의 안정성을 보장- 데이터의 구조가 일관적인 경우에 주로 사용한다.

▷RDBMS(Relational Database Management System)의 종류

RDBMS란 관계형 데이터베이스 관리 시스템으로 MySQL, PostgreSQL, MariaDB 등이 있음.

 

▶NoSQL

- 데이터를 저장할 수 있는 유형의 제한이 없음!

- 새로운 유형의 데이터를 추가하기가 용이

- 데이터의 구조가 일관적이지 않고 자주 변경되는 경우 적합

- 대용량의 데이터(이미지, 동영상 등)를 더 빠르게 처리할 수 있음

▷NoSQL의 종류

MongoDB, Redis, Apache Cassandra 등이 있음.

 

3. 관계형 데이터베이스 만들기

구성요소

▶ 관계

 

배달 앱 같은 곳에서 주문번호는 계속해서 생겨나는데 고객의 이름이나 ID는 거의 바뀌지 않음.

이때 ID 이름 주소와 함께 주문번호도 같이 저장한다면 ID, 이름, 주소는 주문번호가 생길 때마다 중복해서 생겨남.

그래서 이를 ID라는 하나의 속성으로 테이블을 연결해서 효과적으로 관리할 수 있다!!

 

 

▶ SQL을 통한 테이블 관리 알아보기 !

▷ SQL 작성 규칙

 

▷ 테이블 정의하기

CREATE TABLE 테이블명 ( 속성 1 데이터타입 1, 속성 2 데이터타입 2, ...);

CREATE TABLE customer(
    id      VARCHAR(10),
    name    VARCHAR(10),
    address VARCHAR(30)
);

 

▷ 정의한 테이블 확인하기

SHOW TABLES; - 생성된 모든 TABLE을 확인하기

DESC 테이블명; - 특정 테이블에 대한 정보를 확인하기

 

-- 현재 데이터베이스에 있는 모든 테이블 목록 보기
SHOW TABLES;

-- customer 테이블의 구조 보기 (컬럼명, 타입, 제약조건 등)
DESC customer;

 

▷ 데이터 삽입하기

INSERT INTO 테이블명 ( 속성1, 속성2, ...) VALUES( 속성값1, 속성값2, ...);

INSERT INTO customer (id, name, address)
VALUES('kmax6', '김민준', '서울시 관악구 신림동');

-- 속성의 순서는 중요하지 않음
INSERT INTO customer (name, address, id)
VALUES('이서연', '서울시 동작구 대방동', 'flykite');

-- 모든 속성을 순서대로 입력하는 경우 속성 목록은 생략 가능
INSERT INTO customer
VALUES('freeman123', '박서준', '서울시 관악구 신림동');

 

* 속성을 정의한 순서와 관계없이 새로운 순서를 인자로 받아 VALUES 순서와 매치해주면 된다!
* 모든 속성에 대해 추가를 할 것이면 ( )를 적지 않고 테이블명만 적은 후 VALUES에 정의한 순서대로 값을 넣어주면 된다!

 

▷ 데이터 출력하기

SELECT 속성 1, 속성 2, ... FROM 테이블명;

SELECT id, name, address FROM customer;

-- 출력하고 싶은 속성 조정 가능
SELECT address, name FROM customer;

-- "*"을 이용해 모든 속성 출력 가능
SELECT * FROM customer;

 

 

▶ 데이터베이스 정의어, 조작어, 제어어

관계형 데이터베이스를 활용하기 위해 사용하는 표준 언어로 아래와 같은 것들이 있다.

 

데이터 정의어(DDL, Data Definition Language) : 테이블과 같은 데이터 구조 정의

데이터 조작어(DML, Data Manipulaion Language) : 데이터 조회 및 탐색

데이터 제어어(DCL, Data Control Language) : 데이터베이스에 접근하는 권한 관리

 

데이터 정의어에 대해 알아보기

 

0. 먼저 데이터 타입에 대해 알아보자.

이 외에도 TINYINT, BIGINT, TIME, DATE 등이 있음!

자료형은 DBMS마다 차이가 있을 수 있다.

 

1. 테이블 정의하기

CREATE TABLE customer(
    id      VARCHAR(10),
    name    VARCHAR(10),
    address VARCHAR(30)
);

 

2. 테이블 수정하기

-- 컬럼 추가
ALTER TABLE customer ADD COLUMN birthday DATE NULL;
-- 컬럼 수정
ALTER TABLE customer MODIFY COLUMN id varchar(15) NULL;
-- 컬럼 이름 변경
ALTER TABLE customer CHANGE COLUMN name korean_name varchar(10) NOT NULL;
-- 컬럼 삭제
ALTER TABLE customer DROP COLUMN address;
-- 테이블 이름 변경
ALTER TABLE customer RENAME member;

 

* 주의해야 할 점

MODIFY, CAHNGE

 한 속성에 대해 새로 정의하는 느낌이라 속성의 한가지만 바꿔도 다른 것들도 다시 정의를 해줘야한다!!

 (NULL / NOT NULL 명시 안 하면 기본값 NULL 적용됨)

* MODIFY는 이름을 제외한 속성의 내용을 바꿀 때 사용하고,

* CHANGE는 속성의 이름까지 바꿀 수 있다.

 

3. 테이블 삭제하기

DROP TABLE 테이블명

 

4. 데이터베이스 구성하기

▶ 제약 조건

 

제약조건이란 "테이블에 잘못된 데이터가 입력되는 것을 방지하기 위한 규칙"으로 제약조건을 통해 무결성을 지킬 수 있음.

-> 한마디로 속성에 대한 값에 올 수 있는 조건을 걸어 제약을 두는 것 !

 

▷ NOT NULL

널(NULL) 값을 비허용하는 것

아무 데이터도 입력하지 않으면 에러 발생

NOT NULL을 명시하지 않으면 기본적으로 NULL 허용이다!

id VARCHAR(16) NOT NULL

 

▷ UNIQUE

한 테이블에서 중복되는 속성 값을 가지는 것을 비허용하는 것

한 속성에 대해 같은 값이 존재하면 에러 발생*NULL 값은 비교가 불가능하므로 중복되어도 됨

id VARCHAR(10) UNIQUE

 

▷ DEFAULT

아무 값도 들어오지 않았을 때의 기본 값을 지정할 수 있다.

id VARCHAR(16) DEFAULT '기본값'

 

▷ CHECK

들어올 수 있는 값의 범위를 제한하여 특정 값만 허용하는 것

제한한 값이 아닐 경우에 에러 발생

age INT CHECK(age>19)

 

---------------------------------------------------------------------

▶ 제약 조건 정의 (CONSTRAINT)

 

속성을 정의할 때 붙이는 것과 다른 방법으로 CONSTRAINT를 사용할 수 있다.

CONSTRAINT를 사용하면 해당 제약조건의 이름을 정할 수 있다.

 

사용법 :

CONSTRAINT 제약조건이름 제약조건 (적용할 속성)

--테이블 정의하는 부분 안에 사용 'CONSTRAINT 제약조건이름 제약조건 (적용할 속성)'
CREATE TABLE customer(
    id	VARCHAR(10),
    age INT,
    CONSTRAINT id_unique UNIQUE (id),
    CONSTRAINT age_check CHECK (age>=10)
);

 

▶ 제약 조건 추가

 

제약 조건을 추가할 수 있다.

사용법:

ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건이름 제약조건 (적용할 속성);

 

**DEFAULT 제약조건수정은 조금 다르다.

ALTER TABLE ALTER 속성 SET DEFAULT 기본값;

ALTER TABLE customer
ADD CONSTRAINT address_unique UNIQUE (address);

ALTER TABLE customer
ADD CONSTRAINT customer_chk_2 CHECK (age >= 19 AND name = '김민준');

ALTER TABLE customer
ALTER address SET DEFAULT '주소 없음';

 

▶ 제약 조건 삭제

 

사용법 :

ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름;

DEFAULT 제약 조건 삭제 :

ALTER TABLE 테이블명 ALTER 속성 DROP DEFAULT;

ALTER TABLE customer DROP CONSTRAINT customer_chk_2;

ALTER TABLE customer
ALTER address DROP DEFAULT;

 

5. 데이터베이스의 키

▶ 키란? 

조건에 만족하는 튜플을 찾거나, 정렬할 때 기준이 되는 속성

- 기본키 

- 외래키

- 후보키 : 기본키가 될 수 있는 키로 유일성과 최소성(최소한의 속성)을 만족

- 대체키 : 후보키지만 기본키가 아닌 키

- 슈퍼키 : 튜플을 식별할 수 있는 유일성은 만족하지만 최소성은 만족하지 않는 키

 

기본키

서로 다른 튜플을 유일하게 식별할 수 있는 기준이 되는 속성

- 중복되는 값을 가질 수 없음 (UNIQUE)

- 널 값을 가질 수 없음 (NOT NULL)

- 한 테이블 당 1개만 설정 가능하다 !

위 표의 경우 이름과 주소는 중복될 수 있으므로 ID가 기본키로 가장 적합하다.

 

외래키

다른 테이블의 기본키를 참조하는 속성으로 테이블의 관계를 정의

- 참조되는 테이블의 기본키에 없는 값은 지정할 수 없다! (NULL은 가능)

- 기본 키와 다르게 2개 이상의 값을 가질 수 있다.

왼쪽 표에서 ID가 기본키라고 가정할 때,오른쪽 표에서 ID가 기본키를 참조하는 외래키가 될 수 있다.

 

▷SQL로 키를 지정하는 법

기본키 설정 : PRIMARY KEY

외래키 설정 : FOREIGN KEY (외래키로 만들 속성) REFERENCES 참조되는 테이블(참조되는 속성)

CREATE TABLE customer(
    id      VARCHAR(10) PRIMARY KEY,
    name    VARCHAR(10),
    address VARCHAR(30)
);

CREATE TABLE order_history(
    customer_id VARCHAR(10),
    order_id    VARCHAR(14),
    FOREIGN KEY (customer_id) REFERENCES customer(id),
    CONSTRAINT order_history_pk PRIMARY KEY (customer_id, order_id)
);

위 코드에서 보이듯이 CONSTRAINT를 통해 기본키를 등록할 수 있는데,

이때 기본키에 대한 속성으로 2개를 넣는 모습을 볼 수 있음 !!!

- > 고객ID와 주문ID가 있는 경우, 같은 고객에 대해서 많은 주문 ID가 생길 수 있다.

- > 이 경우 고객ID만으로는 특정 튜플을 식별할 수 없음 !!!

- > 그래서 주문ID까지 기본키로 설정해야 특정 튜플을 식별 가능하다!!

 

▷ 무결성 제약 조건 : 데이터가 올바르고 일관되게 유지되도록 강제하는 규칙 !

- 개체 무결성 : 기본키는 널 값과 중복된 값을 가질 수 없음

- 참조 무결성 : 외래키는 이거나 참조되는 릴레이션의 기본키 값과 동일

(고객ID라는 기본키를 참조하지만, 비회원인 경우 고객ID가 NULL일 수 있으니 허용)

------------------------------------------------------------------------------------------------------------

- 도메인 무결성 : 특정 속성값은 그 속성이 정의된 도메인에 속한 값이어함

- NULL 무결성 : 특성 속성값은 널 값을 가질 수 없음

- 고유 무결성 : 각 튜플이 가지는 속성값들은 서로 달라야 함 (모두 같으면 안됨)

- 키 무결성 : 테이블에 최소 한 개 이상의 키가 존재

 

6. 데이터 모델링

현실 세계에 존재하는 데이터를 데이터베이스화 하는 과정

 

▶ 데이터 모델과 구성요소

 

현실 세계의 데이터를 단순화, 추상화하여 표현한 모델

 

- 개체(Entity) : 데이터로 표현하고자 하는 현실 세계의 개념이나 정보의 단위 (ex. 킥보드, 회원) - 명사로 생각하기

- 속성(Attribute) : 개체에 대한 정보 (ex. 킥보드의 브랜드/이용가격, 회원의 아이디/이름)

- 관계(Relationship) : 개체 간의 연관성 (ex. 고객은 킥보드를 대여한다) - 동사로 생각하기

 

▶ 데이터 모델링 과정

 

개념적 설계  > 논리적 설계 > 물리적 설계

 

- 개념적 설계 : 현실 세계를 추상적 개념으로 표현하는 과정

사람이 이해하기 쉽게 추상적으로 표현( 고객 --주문한다--> 상품)

 

- 논리적 설계 : DBMS가 처리할 수 있는 데이터 구조(스키마)를 설계

실제 DB로 저장할 구조로 표현 ( 고객(id, 이름, 주소), 주문(주문번호, 고객id, 상품id) 등)


- 물리적 설계 :
DBMS에 테이블을 저장할 구조를 설계

실제 컴퓨터에 어떻게 저장될지 표현 → 파일 구조, 인덱스 등 실제 저장 방식