[데이터베이스] 데이터베이스의 기본과 DDL

권왈왈·2025년 9월 23일

0. 데이터

데이터 특징

  • 실시간 접근성 : 실시간 접근 가능
  • 계속적으로 변화 : 항상 최근의 정확한 데이터로 변화
  • 동시 공유 : 동시에 공유 여러 사용자가 공유 가능
  • 내용에 의한 참조 : 참조 시 주소 등의 위치가 아닌 내용으로 참조

1) 정형 데이터

  • 데이터가 고정된 구조로 이루어져 있음
  • 일정한 스키마 안에서 데이터를 저장, 관리할 수 있는 데이터 형식
  • 명확한 데이터 타입을 가지며, 각 필드의 값이 예측 가능
  • 관계형 데이터베이스 테이블 MySQL, Oracle 등

2) 반정형 데이터

  • 구조가 있지만, 유연하게 변형 가능(XML, JSON 같은 형식으로 저장)
  • 키-값 쌍(key-value pair) 형태로 데이터를 표현
  • NoSQL 데이터베이스(예: MongoDB) >> (NoSQL은 쿼리를 짜지 않고 관리하는 방식)
  • 날씨, 주식 등 JSON으로 불러오는 데이터들을 말한다.
  • 쿼리를 짜는게 아니라 JSON에서 키값으로 뽑아오는 것

3) 비정형 데이터

  • 항목 설정할 수 없음
  • 문서, 영상, 사운드 등
  • 파일 자체로 저장을 하기 때문에 S3라던지 서버가 다 따로 있다. (AWS의 S3에서 관리)
  • 따로 저장하는 공간을 따로 두고 저장한 곳에서 가져오는 방식으로 관리

1. DBMS (DataBase Management System)

DBMS(DataBase Management System)는 데이터베이스를 생성, 관리, 수정하는 시스템이다. db와 관련된 일련의 작업을 가능하게 하는 프로그램(하드웨어를 포함하는 포괄적인 개념)으로 일반적으로 db프로그램을 칭한다.

1-1. DBMS의 역할

  • 데이터 저장 : 데이터를 테이블 형식으로 구조화하여 저장
  • 데이터 접근 : SQL과 같은 언어를 통해 데이터를 추가, 수정, 삭제, 조회
  • 데이터 무결성 유지 : 데이터의 일관성 및 정확성을 유지
  • 다중 사용자 관리 : 여러 사용자가 동시에 데이터베이스에 접근

데이터베이스는 데이터를 실제로 저장하는 물리적인 공간이다.
스키마는 그 데이터가 어떻게 구조화되고 조직될 것인지에 대해 설계한다.
DBMS는 스키마를 기반으로 데이터를 관리한다.

1-2. 스키마 : 데이터베이스 전체 설계

  • 외부 스키마
    실제 정리되지 않은 상태의 데이터들을 파악하는 과정이다. 사용자(부서별, 개인별) 입장에서 관찰한 데이터를 뽑는다.
  • 개념 스키마
    데이터를 저장하기 위해 논리적, 개념적으로 정리하는 과정이다. 외부단계에서 각 사용자가 사용하기 위해 전체적으로 어덯게 저장되어야 하는가에 관점을 둔다.(조직 전체)
  • 내부 스키마
    이 내용들을 어느 DBMS에 저장할지, 어떻게 저장할지, 테이블은 어떻게 만들지, 데이터타입은 어떻게 할지와 같이 저장장치에 저장하기 위한 설계단계이다. 컴퓨터의 특정 위치에 특정한 파일이름으로 저장하는 과정이다. 어떤 크기로 데이터를 저장할 것인가에 관점을 둔다.(저장 장치)

Entity : 저장하고 관리해야할 큰 틀, 묶음

엔티티를 다 만들고 정리하고 나면 관계가 생긴다. → RDBMS


2. SQL 명령어

1) DDL(Data Definition Language) : 데이터베이스 구조 정의 명령어

  • create : 새로운 데이터베이스, 테이블 생성
  • alter : 기존 데이터베이스 구조 변경
  • drop : 데이터베이스 또는 테이블 삭제
  • truncate : 테이블 내의 저장된 내용 삭제

2) DML(Data Manipulation Language) : 데이터 조작 명령어

  • insert : 데이터를 삽입
  • select : 데이터를 조회 - DQL(질의어)
  • update : 데이터를 수정
  • delete : 데이터를 삭제

3) DCL(Data Control Language) : DBMS 제어 명령어

  • grant : 사용자 권한 부여
  • revoke : 사용자 권한 회수
  • backup
  • restore

4) TCL(Transaction Control Language) : 트랜잭션 제어 명령어

  • commit : 실행 반영
  • rollback : 실행 되돌리기


3. DDL(Data Definition Language)

데이터 정의 언어로, 데이터베이스 객체(테이블, 뷰, 인덱스 등)를 생성(CREATE), 수정(ALTER), 삭제(DELETE)하는 데 사용한다.

3-1. CREATE

데이터베이스의 객체(테이블, 뷰, 인덱스 등)를 생성한다.

column_name : 각 열의 이름
datatype : 각 열의 데이터 유형 (예: int, varchar, date 등)
constraints : 열의 데이터에 대한 규칙, 선택 사항 (예: not null, unique, primary key, foreign key)

💡 varcharchar와 비슷하지만 고정된 크기로만 저장해 공간 낭비가 일어날 수 있는 char와 달리 글자를 가변 길이로 저장해 공간을 절약할 수 있다는 장점이 있다. 따라서 char는 전화번호, 국가 코드와 같이 짧고 일정한 데이터를 저장하는 데에 적합하고 varchar는 이름, 주소, 이메일과 같은 길이가 다양한 가변 데이터를 저장하는 데 적합하다.

3-1-1. 제약조건

테이블 작성 시 각 컬럼에 대해 값 기록에 대한 제약조건을 설정할 수 있다. 데이터 무결성 보장을 목적으로 한다. 입력/수정하는 데이터에 문제가 없는지 자동으로 검사하기 위한 목적이다.
제약조건 종류 : PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE, CHECK, DEFAULT

기본키(primary key)
기본키는 테이블에서 각 행을 고유하게 식별하는 컬럼을 의미한다. not nullunique 제약 조건이 결합된 형태로, 중복 값이 없고 NULL 값을 가질 수 없다. 한 테이블에 하나만 설정할 수 있으며 컬럼 레벨과 테이블 레벨 모두에서 설정 가능하다. 하나의 컬럼을 기본키로 설정하거나 여러 컬럼을 묶어 복합키로 설정할 수 있다.

외래키(foreign key)
외래키는 다른 테이블의 primary key 또는 unique 제약 조건이 설정된 컬럼을 참조하는 제약 조건이다. 테이블 간이 관계를 설정하며 참조 무결성을 유지하기 위해 사용된다. 외래키를 설정하면 참조된 테이블의 값만 사용할 수 있으며 참조 무결성을 위반할 수 없게 된다. 테이블 레벨에서 설정 가능하다.

NOT NULL
해당 컬럼에 반드시 값을 기록해야하는 경우 사용한다. 삽입/수정 시 NULL값을 허용하지 않도록 컬럼레벨에서 제한한다.
아무런 제약 조건이 없다면 NULL값을 넣어도 문제없이 삽입되어 문제가 되는 경우가 생긴다. 예를 들어 제약 조건이 없으면 회원가입 시에 정보를 입력하지 않아도 가입이 처리된다. 따라서 not null 조건이 필요하다.

UNIQUE
컬럼에 입력한 값들에 대해 중복을 제한하는 제약조건이다. 컬럼 레벨, 테이블레벨에서 설정 가능하다.
제약조건이 없다면 중복된 값이 들어가도 처리가 되어서 회원 가입 시 중복된 아이디로 가입하게 되면 회원들을 구분할 수 없게 된다는 문제가 생길 수 있다. UNIQUE 제약조건이 설정된 컬럼에는 중복 값은 넣을 수 없게 된다.

※ UNIQUE 제약 조건이 설정되었다 하더라고 NULL 값으로 넣게 되면 중복 처리가 되어 버린다.
이때 해결 방법은 UNIQUE 제약조건과 NOT NULL 제약 조건을 같이 주면 된다.

CHECK
컬럼에 기록되는 값에 조건을 설정할 수 있다. (8버전 이상부터 가능)

check ([컬럼명] [비교연산자] [비교값])

비교값은 리터럴값만 사용할 수 있다. 변하는 값이나 함수는 사용하지 못한다.
자동으로 NOT NULL 규칙이 적용된다.

DEFAULT
컬럼에 값이 입력되지 않았을 경우, 기본값을 자동으로 할당한다.

제약조건설명
PRIMARY KEY기본키, NOT NULLUNIQUE 조건의 결합 형태이다.
FOREIGN KEY외래키, 참조하는 테이블의 PRIMARY KEYUNIQUE컬럼을 참조한다.
NOT NULL해당 컬럼이 NULL 값을 허용하지 않음을 보장한다.
UNIQUE중복된 값이 입력되지 않도록 고유한 값을 보장한다.
CHECK특정 조건을 만족하는 값만 허용하여 데이터 유효성을 보장한다.
DEFAULT값이 입력되지 않았을 경우, 기본값을 자동으로 할당하여 입력 데이터의 일관성을 유지한다.

3-1-2. 서브 쿼리를 이용한 테이블 생성

NOT NULL 제약조건을 포함한 컬럼 구조는 복사되지만 primary key, auto_increment, index가 복사되지 않음

profile
slow but steady

0개의 댓글