DB란
구조화된 정보, 데이터의 조직화된 모음으로서 컴퓨터 시스템에 전자적으로 저장된다.
데이터베이스는 일반적으로 DBMS(데이터베이스 관리 시스템)에 의해 제어가 된다
RDBMS
Relational DataBase Management System
DBMS와는 다르게 각 테이블간의 데이터가 연관되어있고 효율적으로 데이터를 저장, 관리할 수 있는 소프트웨어를 말한다
ex) mysql, oracleDB
SQL이란
Structured Query Language
데이터를 조작, 정의, 제어를 하기위해 RDBMS에서 사용되는 프로그래밍 언어이다
MySql
스키마(SCHEMAS)
mysql의 데이터베이스로 각 스키마는 안쪽에 테이블들을 가지고있다
쉽게 생각해서 각 스키마는 각각의 프로젝트라고 생각하자
스키마 생성
CREATE SCHEMA '스키마이름' DEFAULT CHARACTER SET utf8;
SQL
복사
테이블
RDBMS는 테이블이 있고 그 테이블이 서로 관계를 가질수 있다했다
여기서 테이블은 DB에 실제 데이터가 저장되는 부분으로 행과 열로 이루어져있다
테이블 생성
CREATE TABLE table_name (
id_num INT NOT NULL AUTO_INCREMENT,
mb_id VARCHAR(20),
mb_pw VARCHAR(100),
PRIMARY KEY(seq)
) ENGINE= MYISAM CHARSET=utf8;
SQL
복사
첫번째줄은 테이블의 이름을 넣는다
그 후 두번째 줄부터 컬럼(열)을 채워넣는데 각 컬럼마다 데이터의 타입과 옵션들을 추가할 수있다
데이터 타입
•
INT : 숫자형
•
VARCHAR(10) : 문자형(문자최대길이)
•
DATE : 날짜형
•
BLOB : 이진 대형 객체, 문자가 아닌 큰 데이터를 넣을수있다
•
TEXT : 큰 문자를 넣을수있다
다른 데이터타입이 많지만 일단 이정도만 쓰겠다
PK, FK, NN, UQ 등등 옵션
•
PK(Primary Key) : 이름처럼 컬럼을 고유하게 구분해 주는 역할을 한다.
◦
pk를 쓴 컬럼에 값을 추가할때는 중복이 불가능하다, 즉 회원가입할때 id가 겹치면 안되듯이 pk가 그런 역할을 한다
•
FK(Foreign Key) : 왜래키라고 부르며 다른 테이블과 연결시켜주는 역할을 한다
왜래키가 설정된 컬럼은 다른 테이블을 의존하게 된다
만약 우리가 책에대한 정보를 DB에 저장을 하려고한다 그렇게되면 기본적으로 이런 그림이 나오게된다
이렇게 테이블을 만들게 되면 문제점이 발생한다. 바로 출판사와 출판사 주소다
책을 출판사에서 출간하는데 출판사가 같을경우 데이터가 겹치게되고 출판사의 주소도 겹치게되니깐
엄청난 용량 소모로 이어지게된다
그래서 이것을 fk를 이용해 바꾸었다
각 출판사에게 출판사id를 부여하였고 그 id를 book에 추가했다
이렇게되면 varchar였던 컬럼이 int로 바뀌게되고 용량을 절약함과 동시에 효율적인 db를 만들수있다
전)
id | name | publisher | publisher_addr | price |
1 | 토비의 스프링3 | 에이콘 | 서울시 은평구 | 30000 |
2 | 도커에서 윈도우… | 에이콘 | 서울시 은평구 | 40000 |
3 | 코틀린으로 안드… | 에이콘 | 서울시 은평구 | 35000 |
4 | 모두의 깃 & 깃허브 | 길벗 | 서울시 서초구 | 30000 |
5 | 2023 시나공 | 길벗 | 서울시 서초구 | 35000 |
publisher와 publisher_addr이 중복으로 들어가서 데이터 낭비가 심하다
후)
id | name | publisher_id | price |
1 | 토비의 스프링3 | 1 | 30000 |
2 | 도커에서 윈도우… | 1 | 40000 |
3 | 코틀린으로 안드… | 1 | 35000 |
4 | 모두의 깃 & 깃허브 | 2 | 30000 |
5 | 2023 시나공 | 2 | 35000 |
publisher_id | publisher_name | publiser_addr |
1 | 에이콘 | 서울시 은평구 |
2 | 길벗 | 서울시 서초구 |
fk를 이용해 관계형 테이블을 만들어 데이터를 효율적으로 보관하고 용량도 줄였다
•
NN : NotNull, 행에 데이터를 추가할때 빈칸(null)을 허용할지 안할지 정한다
•
UQ : Unique, 각 행이 서로 다른 값을 가지게 만든다
•
Auto Increment : 이름처럼 행이 추가될때마다 값을 자동으로 증가시켜준다. id에서 유용하다
•
DEFAULT : 데이터를 넣을때 값을 넣지않으면 null이 되게되는데 기본으로 들어갈 값을 지정해준다