데이터베이스2017. 6. 17. 23:49

위키피디아를 많이 참조했습니다.

매우 간단하게 요약.

 

먼저 정규화(Normalization)란 무엇일까?

- 정규화란

관계형 데이터베이스(테이블간에 관계를 맺을 수 있는 상황)에서 중복을 최소화 하기 위해서

데이터를 구조화 하는 작업.

 

 

1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF 가 있으며

보통 3NF 가 되었으면 ‘정규화 되었다’ 라고 한다.

하지만 실무에서는 대규모 데이터 처리시 성능(Performance)향상을 위해 정규화를 안쓰거나 낮은 수준의 정규화를 만족하는 경우가 많다.

예를 들어서 어떤 고객의 정보를 2개의 테이블로 나누어 두었다고 했을 때 정보를 불러오려면 2개의 테이블에 각각 접근해야 하므로 부하(load)가 걸린다.
하지만 하나의 테이블에 몰아두었을 경우 당연히 더 빠른 성능을 보장한다. (아래의 그림 1(비 정규화), 그림 2(1NF 정규화) 참고)

 

1NF(First Normal Form) : 행과 열의 순서에 영향을 받지 않으며 (원래 DB 는 영향을 안받는다.), 모든 항목에 값이 있어야하며(NULL 허용안함), 중복 기능 열이 없어야 한다.
e1
<그림 1 : NULL 값도 있으며, 같은 기능을 하는 열(TEL 1, TEL 2, TEL 3)이 있어서 1NF아님>

 

 
e2
<그림 2 : NULL값 없고, 중복 기능열도 없음. 1NF 충족. (이 경우 2NF, 3NF 도 충족하는데 이건 아래에서 다 이해하고 다시 살펴보기 바람>

 

 

 

2NF(Second Normal Form) : 이행적 함수 종속이 있을 경우, 그것을 쪼갬.

즉 정적인 데이터에서 한 필드가 다른 필드를 정의할 수 있을 때
e3
<그림 : 종업원 필드가 근무지 필드에 영향을 준다. 종업원-근무지 를 따로 꺼낼 수 있다. 좀 더 멋지게(어렵게) 표현하자면, 근무지 필드가 종업원 필드에 함수종속적 이므로 분리하여야 한다.>
e4
<그림 : 함수 종속적인 필드를 분리. 2NF 만족(물론 1NF도)>

 

 

3NF(Third Normal Form) : 계산열 제거.

다른 열의 값을 계산해서 해당 필드에 가지고 있다.

mysql, mssql, oracle 모두 가능하다.

계산되는 열은 (개발자의 관점에서 보는 테이블 열에서) 제거한다.
e5
<그림 : 1NF만족. 2NF는 주민등록번호를 따로 분리할 수 있는지 봤는데 PK인 고객번호와 역할이 동일하므로 분리 안되더라. 무튼 2NF도 만족>

이 상황에서 계산 가능한 열을 삭제.

2NF 연결되는 것 분리 후에 3NF 계산할 수 있는 것은 삭제하면 된다.
e6
<그림 : 3 정규화 하는 모습. 삭제된 필드는 계산하여 복구 할 수 있으므로 계산열(계산필드)로 처리하거나 쿼리시 관련 계산을 하면 된다>

 

 

 

자료 참조 :

데이터베이스 정규화 - http://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94

제 3 정규화 - http://www.officetutor.com/column/kkk-db/kkk_12.htm

'데이터베이스' 카테고리의 다른 글

JOIN 간단 정리  (0) 2017.03.23
데이터베이스 백업 및 복원  (0) 2017.03.23
정렬하면 1다음 11이 나올때 해결책  (0) 2017.03.23
기본적인 명령어 모음  (0) 2017.03.23
Posted by EL2A
데이터베이스2017. 3. 23. 19:45

JOIN 종류 4가지


1. LEFT JOIN

A : 1,2,3

B : 1,2.4

Result => 1,2,3


2. RIGHT JOIN

A : 1,2,3

B : 1,2.4

Result => 1,2,4


3. INNER JOIN

A : 1,2,3

B : 1,2.4

Result => 1,2


4. FULL OUTER JOIN

A : 1,2,3

B : 1,2.4

Result => 1,2,3,4

Posted by EL2A
데이터베이스2017. 3. 23. 19:44

백업하기


1. /usr/local/mysql_5.5.30/bin 폴더로 이동

2. mysqldump -uroot -p mydatabase > backup.sql

이렇게 하면 db를 덤프 뜰수 있다.

※ 백업경로 지정할때 ../../../../home/backup.sql 식으로 지정하면 4번의 상단경로에서 시작해서 home 폴더에 저장할 수 있다.





복원하기


백업파일을 가져온 후

mysql -uroot -p mydatabase < backup.sql 

복원완료

'데이터베이스' 카테고리의 다른 글

데이터베이스 정규화 (DB normalization)  (0) 2017.06.17
JOIN 간단 정리  (0) 2017.03.23
정렬하면 1다음 11이 나올때 해결책  (0) 2017.03.23
기본적인 명령어 모음  (0) 2017.03.23
Posted by EL2A
데이터베이스2017. 3. 23. 19:43


[형변환 함수] 

CAST(expression AS type) 
CONVERT(expression,type) 
CONVERT(expr USING transcoding_name) 

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

[타입유형] 

* BINARY 
* CHAR 
* DATE 
* DATETIME 
* SIGNED 
* TIME 
* UNSIGNED 

CAST()와 CONVERT()는 4.0.2부터 가능하고, CHAR 형변환은 4.0.6부터, 
CONVERT()의 USING 형식은 4.1.0부터 가능합니다. 

********************************************* 

[예제] 

DROP TABLE IF EXISTS T_CON; 
CREATE TABLE T_CON ( 
no INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
num VARCHAR(20) , 
name VARCHAR(20) 
); 
INSERT INTO T_CON VALUES 
(NULL, '1', '이효리'), 
(NULL, '5', '성유리'), 
(NULL, '12', '이진'), 
(NULL, '14', '옥주현'); 

SELECT num, name FROM T_CON ORDER BY num; 
---------------------- 
num name 
1 이효리 
12 이진 
14 옥주현 
5 성유리 
---------------------- 

SELECT CAST(num AS UNSIGNED) num, name FROM T_CON ORDER BY num; 
---------------------- 
num name 
1 이효리 
5 성유리 
12 이진 
14 옥주현 
----------------------


출처 : http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=57345&sca=&sfl=wr_name%7C%7Csubject&stx=%C4%AE%BC%D8&sop=and&page=2

'데이터베이스' 카테고리의 다른 글

데이터베이스 정규화 (DB normalization)  (0) 2017.06.17
JOIN 간단 정리  (0) 2017.03.23
데이터베이스 백업 및 복원  (0) 2017.03.23
기본적인 명령어 모음  (0) 2017.03.23
Posted by EL2A
데이터베이스2017. 3. 23. 19:41

- 데이터베이스 버전 및 오늘날짜 확인

mysql> select version(), current_date;




- 데이터베이스 생성과 삭제

create database <database명> ;

drop database <database명> ;




- 테이블 생성과 삭제

create table <table명> (필드리스트)


       create table david_tb (no int not null,

       name char(10),

       age int,

       primary key(no)

       );


- 테이블 삭제

drop table <table명>




- 테이블 입력하기

insert into <table명> (필드리스트....) values (값...);


       mysql>insert into david_tb (no, name, age)

       -> values(101,'혼다 소이치로',34);

       mysql>insert into david_tb

       -> values(102, '김정주',31);

       mysql>insert into david_tb

       -> values(103, '안철수',44);




- 테이블 구조보기

desc <table명>




- 테이블 모든 필드 보기

select *from 테이블명




- 컬럼 추가

ALTER TABLE [테이블명] ADD [추가할 컬럼명] [추가할 컬럼 데이터형];


- 컬럼 변경

ALTER TABLE 테이블명 MODIFY 컬럼이름 새컬럼타입


-컬럼 삭제

ALTER TABLE 테이블명 DROP COLUMN 칼럼이름




- 레코드 검색

SELECT id, title, description FROM topic WHERE id='10';




- 레코드 수정

UPDATE person SET name='five' WHERE no='3';




- 레코드 삭제

DELETE FROM 테이블명 WHERE 필드명 = '조건';

       ex) DELETE FROM topic WHERE id='12';

Posted by EL2A