DB - 실제로 만들어보면서 완벽하게 이해하자!

박경현·2023년 8월 19일
1

DB에 대해 상당히 소홀했는데 이번 학기에 DB를 듣기 때문에
그 전에 DB가 어떤것이고 DB를 이용해서 원하는 자료들을 저장하는 방법 정도는 익혀보려고 한다!

DB란

DB를 정의를 해본적이 지금까지 없었던거 같아 제대로 정의를 하고 들어가려고 한다!

전자적으로 저장되고 사용되는 서로 연관된 데이터들의 조직화된 집합

DBMS

사용자에게 DB를 정의하고 만들고 관리하는 기능을 제공하는 소프트웨어 시스템
ex) mysql, postgre sql, mongodb 등

metadata

db를 정의하거나 기술하는 데이터, catalog라고도 불림
이 db가 무엇을 저장하는지에 대한 대략적인 정보를 담고 있다!!

기본적인 dB를 사용하는 방법

  1. 기본적으로 프로그래머가 DB가 있는 어플리케이션을 만들었다고 가정!
  2. 유저가 쿼리를 요청해서 프로그램에서 요청을 처리함!
  3. 데이터가 어떤형태로 되어있는지 파악하고 실제 요청 받은 쿼리를 작동시킴!
    쿼리란 -> DB에 접근해서 유저가 데이터를 가져오거나 수정하는 요청이라고 생각하기

Data Model의 분류

처음에는 data 모델을 왜 분류할까 했었다 하지만 공부를 하면서

사용자 입장에서 바라본 추상적인 DM과
개발자 입장에서 바라본 기술적인 DM,
기획자가 바라본 비지니스적인 DM이
다 다르게 표현해야 서로 유연하게 바라볼 수 있구나를 깨달았다!

conceptual - 추상적인 분류 (일반 사용자)

사진처럼 추상적으로 분류해놔서 누구나 이해하기 쉽다!

logical - 대략적인 db 구조화 (비지니스적 표현)

이해하기 어렵지 않으면서 row, col로 대략적으로 나눈 db표현이다!

physical - 디테일한 db 구조화 (schema로 표현)

컴퓨터에 데이터가 어떻게 저장되는지 가장 자세하게 표현한 방식!

실제로 DB를 하나 구상하고 만들어보자!

지금부터는 이론을 배웠으니까 실제 DB를 만들어보려고 한다!

구상

IT회사의 RDB를 만들어볼거다!
-> 부서, 사원, 프로젝트, 대략적인 정보가 담긴 각각의 테이블을 만들거다

화살표를 보면 무엇이 무엇을 참조하는지 알려준다!
ex) department의 leader_id는 employee의 id를 의미!

DB 생성 및 채택하기

사진 캡처가 블로그에 너무 화질 안좋게 올라가서 직접 작성해보겠다!

show databases; --> 이러면 현재 db들을 보여준다!
create database company; -> company라는 db를 만들거라는걸 알려줌!
select database(); -> 현재 선택된 db가 있는지 물어보는데 없어서 NULL이 나온다
use company; -> 내가 사용할 db를 알려준다!

테이블 생성 및 각 변수들 이해하기

DEPARTMENT 테이블

create table DEPARTMENT (
	id		INT				primary key,
    name	VARCHAR(20)		NOT NULL,
    leader_id	INT
);

EMPLOYEE 테이블

create table EMPLOYEE (
	id			INT				primary key,
    name		VARCHAR(20)		NOT NULL,
    birth_date	DATE,
    sex			CHAR(1)			CHECK(sex in ('M', 'F')),
    position	VARCHAR(10),
    salary		INT				DEFAULT 50000000,
    dept_id		INT,
    CHECK (salary >= 50000000),
    FOREIGN KEY (dept_id) references DEPARTMENT(id)
    on delete SET NULL on update CASCADE
);

PROJECT 테이블

create table PROJECT (
	id			INT				PRIMARY KEY,
    name		VARCHAR(20)		NOT NULL,
    leader_id	INT,
    start_date	DATE,
    end_date	DATE,
    CHECK (start_date < end_date),
    FOREIGN KEY (leader_id)	references EMPLOYEE (id)
    on delete SET NULL on update CASCADE
);

WORKS_ON 테이블

DEPARTMENT 추가로 수정할 부분!

ALTER TABLE DEPARTMENT ADD FOREIGN KEY (leader_id) 
	references EMPLOYEE (id)
    on update CASCADE on delete SET NULL;

앞으로의 DB공부 계획!

DB는 현재 보고 있는 강의를 다음주까지 완강하고 5번 만들어보는걸 목표로 하고 있다!

또한 이것도 이틀에 한번 블로그를 적을 계획이다!

1번째는 강의보고 이해하며 치기
2번째는 블로그 작성할때 보면서 만들어보기
3,4번째는 안보고 작성해보기
5번째는 조금 다르게 상황과 테이블, 데이터를 잡아서 다르게 만들어보기!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글