1정처기 - DB

ssssm·2026년 4월 17일

SQL

관계형 데이터베이스 RDBMS를 위해 설계된 프로그래밍 언어

정의, 조작, 제어 정의어

유형설명
정의어 DDLCREATE / DROP / ALTER / TRUNCATE
조작의 DMLINSERT / UPDATE / DELETE / SELECT
데이터 제어어 DCLGRANT / REVOKE
트랜잭션 제어어 TCLCOMMIT / ROLLBACK / SAVEPOINT

정의어 DDL

// 예제 1 테이블 생성
CREATE TABLE 테이블명
	컬럼명 데이터타입 [제약조건]
    name varchar(30) [제약조건]
    				NOT NULL : null	입력 불가
                    UNIQUE : 중복값 불가
                    PRIMARY KEY : 기본키 설정
                    CHECK : 검증 CHECK IN ('M, 'F')
                    DEFAULT : 기본값 지정

// 예제 2 가상 테이블 생성
CREATE VIEW 뷰명
AS
SELECT 컬럼1, 컬럼2 FROM 테이블명;

// 예제 3 인덱스 생성
CREATE INDEX 인덱스명 ON 테이블명(컬럼명);
// 예제 1 컬럼 추가
ALTER TABLE 테이블명
ADD (컬럼명 데이터타입 [제약조건]);

// 예제 2 컬럼 수정
ALTER TABLE 테이블명
MODIFY (컬럼명 데이터타입 [제약조건]);

// 예제 3 컬럼 삭제
ALTER TABLE 테이블명
DROP COLUMN 컬럼명;

// 예제 4 컬럼명 수정
ALTER TABLE 테이블명
RENAME 기존 컬럼명 TO 새컬럼명;
DROP TABLE 테이블명;
TRUNCATE TABLE 테이블명;

조작어 DML

// 컬럼명을 지정하여 INSERT
INSERT INTO student(name, major, age)
VALUES('Kim', '컴퓨터공학', 25);

// 다른 테이블 조회 후 그 결과를 INSERT
INSERT INTO student_backup(name, major, age)
SELECT name, major, age
FROM student
WHERE major = '컴퓨터공학';

// UPDATE
UPDATE 테이블명
SET 컬럼명
WHERE 조건;

// DELETE
DELETE FROM 테이블명
WHERE 조건;

// UNION, UNION ALL, INTERSECT, EXCEPT

데이터 제어어 DCL

// userA에게 Student 테이블의 조회 권한 부여
GRANT SELECT ON Student 
TO userA;

// userA에게 Student 테이블의 조회, 삽입 권한 부여
GRANT SELECT, INSERT ON Student
TO userA;

// 다른 사용자에게 권한을 재부여
마지막에 WITH GRANT OPTION;

// userA의 조회 권한 회수
REVOKE SELECT ON Student FROM userA;

NULL 문제

COUNT(컬럼명) : NULL 제외
DISTINCT : NULL 포함
집계함수 : 무시하고 계산에서 제외
GROUP BY : NULL 끼리 그룹핑 가능
WHERE 절 : NULL 비교 불가라서 제외

JOIN

// INNER JOIN
교집합

// NATURAL JOIN
자연스럽게 JOIN, 공통 컬럼 1// FULL OUTER JOIN
먼저 INNER JOIN 후 교집합 없는 컬럼은 NULL로 채움

// LEFT OUTER JOIN, RIGHT OUTER JOIN
먼저 INNER JOIN 후 왼쪽만, 오른쪽만

// CROSS JOIN
테이블 X 테이블

트랜잭션 ACID

원자성 Atomicity : 트랜잭션 연산 모두 실행 or 하나도 실행 X
일관성 Consistency : 트랜잭션 실행 후 일관된 데이터베이스 유지
고립성 Isolation : 하나 트랜잭션 실행중 끼어들 수 없음
지속성 Durability : 성공된 트랜잭션은 영구적으로 데이터베이스에 저장

논리 DB 설계

관계 데이터 모델 구성요소

Relation : 행과 열로 구성된 2차원 테이블
Tupple : 행, 레코드
Attibute : 열, 데이터 필드
Cardinality : 튜플의 수
Degree : 속성의 수

Schema : 데이터베이스의 구조와 제약조건 명세
Instance : 릴레이션에 들어있는 데이터 집합
Domain : 속성들이 가질 수 있는 값의 범위

데이터베이스 스키마 3단계 구조

외부 스키마

  • 사용자나 개발자 관점

개념 스키마

  • 데이터베이스의 전체적인 논리구조

내부 스키마

  • 물리적 저장 장치 관점

데이터 독립성

  • 논리적 독립성 : 테이블 구조(개념 스키마)가 바뀌어도, 기존 사용자 뷰(외부 스키마)는 그대로 유지
  • 물리적 독립성 : 저장 방식(내부 스키마)이 바뀌어도, 개념 스키마는 영향 받지 않음

요개논물

데이터 모델 3가지 구성요소

구조 : 데이터베이스에 표현될 객체 타입, 데이터 타입, 객체들 간의 관계 정의
연산 : 데이터를 조작하고 검색하는 방법에 대한 명세
제약조건 : 일관성 있는 데이터를 유지하기 위한 논리적인 제약사항

데이터베이스 설계 4단계

단계핵심활동산출물
요구사항 분석사용자의 요구사항 수집하고 분석요구사항 명세서
개념적 설계현실세계를 추상적인 개념 모델로 표현개념적 스키마 / E-R 다이어그램
논리적 설계DBMS가 지원하는 논리적 모델로 변환논리적 스키마 / 테이블 명세서
물리적 설계실제 저장장치에 맞는 물리적 구조 설계물리적 스키마 / 테이블 정의서

물리 DB 설계

(이상현상) 발생 -> (함수적 종속) 바탕으로 (정규화) 진행

이상현상

삽입이상 : 새로운 튜플 추가 시 불필요한 데이터 발생 + 무결성 위반
삭제이상 : 기존 튜플 삭제 시 연쇄 삭제 발생
갱신이상 : 속성값 변경 시 정보 모순 발생

함수적 종속

유형설명
완전 함수 종속(Full Functional Dependency)기본키 전체에 대해서만 종속
부분 함수 종속(Partial Functional Dependency)기본키 일부 속성에 종속되는 경우
이행 함수 종속(Transitive Functional Dependency)A->B / B->C / A->C가 성립하는 관계

같은 의미
한 릴레이션에서 속성A값이 속성B값을 유일하게 결정
속성B은 속성A에 함수적으로 종속된다
A -> B

정규화

제1정규형(1NF) : 모든 속성 값이 원자값
제2정규형(2NF) : 부분 함수 종속 제거
제3정규형(3NF) : 이행적 함수 종속 제거
BCNF : 결정자 / 후보키
제4정규형(4NF) : 다치 종속 제거
제5정규형(5NF) : 조인 종속 제거

  • 반정규화
    성능향상이나 개발의 편의성을 위해 의도적으로 중복을 허용

슈퍼키 : 튜플을 유일하게 식별할 수 있는 속성 집합
후보키 : 튜플을 유일하게 식별하면서 최소한의 속성으로 구성된 키
대체키 : 기본키로 선택되지 못한 나머지 후보키
기본키 : 후보키 중 선택된 단 하나의 키

외래키 : 다른 테이블 기본키를 참조

데이터베이스 무결성

구분설명
개체 무결성기본키는 NULL값을 가질 수 없으며, 릴레이션에서 유일해야 한다
참조 무결성외래키 값은 참조 릴레이션의 기본키 값이거나 NULL이어야 한다
도메인(속성) 무결성속성값은 정해진 도메인 범위에 속해야 한다

스토리지

여러개의 물리적인 디스크를 하나의 논리적인 디스크처럼 사용하는 기술

주요 목적 : 성능 향상, 안전성 확보

스트라이핑 : 데이터를 여러 디스크에 분산 저장하여 동시에 읽고 쓸 수 있게 함. 성능 향상
미러링 : 동일한 데이터를 두 개 이상의 디스크에 복제 저장. 안전성 향상
패리티 : 데이터의 오류를 검출하고 복구하기 위한 추가 정보.

RAID 레벨기술패리티 최소 디스크장애 허용저장 효율
0스트라이핑2불가100%
1미러링21개50%
5스트라이핑 + 분산 패리티31개(n-1)/n
6스트라이핑 + 이중 패리티42개(n-2)/n
10미러링 + 스트라이핑4쌍 당 1개50%

0개의 댓글