V 28일차 - JDBC와 DBMS, SQLyog_07, 정규화와 비정규화

박태은·2024년 7월 16일

V 웹개발자 프로젝트

목록 보기
29/59
데이터 정규화
정규화란 데이터 베이스를 설계할 때 중복을 최소화하는 것을 말하며, 크고 제대로 조직화되어 있지 않은 테이블과 관계들을 조직화된 테이블과 관계들로 나누는 것이다.

비정규화
비정규화는 정규형에 일치하게 되어 있는 테이블을 정규형을 지키지 않는 테이블로 만드는 것을 의미한다. 정규형을 지키면 이상 현상(갱신, 삭제, 삽입)을 방지할 수 있고, 테이블의 구조를 수정하고 이해하기 편하다는 장점이 있다. 반면에, 테이블이 조각조각 나뉘어 있기 때문에 속도가 느리고, 성능이 저하될 수 있다는 단점이 있다. 

비정규화 = 정규화 롤백



1NF(제1 정규화)
테이블 안의 모든 값들은 단일 값이어야 한다.
ex) 나라
한국 (o)
프랑스, 미국 (x)


2NF(제2 정규화)
현재 테이블과 주제가 맞지않는 테이블은 다른 곳으로 이동시키자
ex) c언어 열을 삭제하고싶은데 다른것도많다!



3NF(제3 정규화)
일반 컬럼에만 종속한 다른 컬럼을 다른 테이블로 이동
ex)
강사		출신대학
김철수		a
김영희		b
박영수		c
박영수		c
김철수		d

-출신대학 테이블 분리








-------------------------------------







# 트랜잭션 예제
# 트랜잭션이란? - 하나의 업무단위를 뜻함. 하나의 업무에 사용되는 다수의 query는 모두 성공하거나 모두 실패해야한다는 뜻.
# 데이터의 무결성을 보장하기 위함.
DROP DATABASE IF EXISTS t1;
CREATE DATABASE t1;
USE t1;

CREATE TABLE `account`(
  accountNo INT PRIMARY KEY AUTO_INCREMENT,
  amount INT NOT NULL
);

DELETE FROM `account`;

INSERT INTO `account` SET amount = 20000;
INSERT INTO `account` SET amount = 10000;

SELECT * FROM `account`;
# 1 -> 2로 10000원 계좌 이체                       

# 트랜잭션 시작
START TRANSACTION;

## 1의 계좌에 10000원 감소
UPDATE `account` 
SET amount = amount - 10000
WHERE accountNo = 1;

SELECT * FROM `account`;
# 만일 여기서 어떤 이유로 작업이 중단된다면
# 1의 계좌에서 10000원이 감소된 상태로 처리가 끝내가 되고, 2는 10000원을 받지 못하게 된다.

ROLLBACK; # 만일 여기서 문제가 생기면 START TRANSACTION 부분으로 모든 작업을 되돌린다.

SELECT * FROM `account`;
## 2의 계좌에 20000원 증가
UPDATE `account` 
SET amount = amount + 10000
WHERE accountNo = 2;
 
COMMIT; # 여기까지 문제 없이 진행되면 START TRANSACTION ~ COMMIT 사이에 있는 모든 내용을 DB에 반영한다. 그렇지 않고 도중에 작업이 중단되면 중단된 시점에 처음으로 ROLLBACK을 수행한다.

SELECT * FROM `account`;

 
 
profile
취업준비생. 웹개발자를 목표로.

0개의 댓글