DB에 대해 상당히 소홀했는데 이번 학기에 DB를 듣기 때문에
그 전에 DB가 어떤것이고 DB를 이용해서 원하는 자료들을 저장하는 방법 정도는 익혀보려고 한다!
DB를 정의를 해본적이 지금까지 없었던거 같아 제대로 정의를 하고 들어가려고 한다!
전자적으로 저장되고 사용되는 서로 연관된 데이터들의 조직화된 집합
사용자에게 DB를 정의하고 만들고 관리하는 기능을 제공하는 소프트웨어 시스템
ex) mysql, postgre sql, mongodb 등
db를 정의하거나 기술하는 데이터, catalog라고도 불림
이 db가 무엇을 저장하는지에 대한 대략적인 정보를 담고 있다!!
- 기본적으로 프로그래머가 DB가 있는 어플리케이션을 만들었다고 가정!
- 유저가 쿼리를 요청해서 프로그램에서 요청을 처리함!
- 데이터가 어떤형태로 되어있는지 파악하고 실제 요청 받은 쿼리를 작동시킴!
쿼리란 -> DB에 접근해서 유저가 데이터를 가져오거나 수정하는 요청이라고 생각하기
처음에는 data 모델을 왜 분류할까 했었다 하지만 공부를 하면서
사용자 입장에서 바라본 추상적인 DM과
개발자 입장에서 바라본 기술적인 DM,
기획자가 바라본 비지니스적인 DM이
다 다르게 표현해야 서로 유연하게 바라볼 수 있구나를 깨달았다!
사진처럼 추상적으로 분류해놔서 누구나 이해하기 쉽다!
이해하기 어렵지 않으면서 row, col로 대략적으로 나눈 db표현이다!
컴퓨터에 데이터가 어떻게 저장되는지 가장 자세하게 표현한 방식!
지금부터는 이론을 배웠으니까 실제 DB를 만들어보려고 한다!
IT회사의 RDB를 만들어볼거다!
-> 부서, 사원, 프로젝트, 대략적인 정보가 담긴 각각의 테이블을 만들거다
화살표를 보면 무엇이 무엇을 참조하는지 알려준다!
ex) department의 leader_id는 employee의 id를 의미!
사진 캡처가 블로그에 너무 화질 안좋게 올라가서 직접 작성해보겠다!
show databases; --> 이러면 현재 db들을 보여준다!
create database company; -> company라는 db를 만들거라는걸 알려줌!
select database(); -> 현재 선택된 db가 있는지 물어보는데 없어서 NULL이 나온다
use company; -> 내가 사용할 db를 알려준다!
create table DEPARTMENT (
id INT primary key,
name VARCHAR(20) NOT NULL,
leader_id INT
);
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
);
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
);
ALTER TABLE DEPARTMENT ADD FOREIGN KEY (leader_id)
references EMPLOYEE (id)
on update CASCADE on delete SET NULL;
DB는 현재 보고 있는 강의를 다음주까지 완강하고 5번 만들어보는걸 목표로 하고 있다!
또한 이것도 이틀에 한번 블로그를 적을 계획이다!
1번째는 강의보고 이해하며 치기
2번째는 블로그 작성할때 보면서 만들어보기
3,4번째는 안보고 작성해보기
5번째는 조금 다르게 상황과 테이블, 데이터를 잡아서 다르게 만들어보기!