Oracle(오라클) 데이터베이스에서는 기본적으로 sequence 객체를 사용하여, 기본키로 설정하는 경우가 많다.

생성하는 방법도 쉽고, 사용하는 방법도 쉬운 오라클 시퀀스 객체에 비해 mysql은 다소 어려운 감이 있다.


/* 오라클 시퀀스 기본 생성 예 */

create sequence [시퀀스 명];

[시퀀스 명].nextval() -- 1씩 순차적으로 증가함.


오라클 데이터베이스에 익숙해진 상태에서, mysql로 똑같은 기능을 구현하려니 많이 답답했다.

이것저것 검색 해 본 뒤에야, 가장 간단하고 쉽게 구현하는 방법을 찾아냈다.


/* mysql 시퀀스 기본 생성 예 */


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* seq_mysql 테이블 생성 */
 CREATE TABLE seq_mysql(
 
     id INT NOT NULL
 
     seq_name VARCHAR(50NOT NULL
 
 );
 
/* 생성된 펑션 삭제 */
 DROP FUNCTION IF EXISTS get_seq;
 
/* Auto_increment 적용 */
DELIMITER $$
 
CREATE FUNCTION get_seq (p_seq_name VARCHAR(45))
 
RETURNS INT READS SQL DATA
 
BEGIN
 
DECLARE RESULT_ID INT;
 
UPDATE seq_mysql SET id = LAST_INSERT_ID(id+1
 
 WHERE seq_name = p_seq_name;
 
SET RESULT_ID = (SELECT LAST_INSERT_ID());
 
RETURN RESULT_ID;
 
END $$
 
DELIMITER ;
 
/* 시퀀스 생성 */ 
INSERT INTO seq_mysql
 
 VALUES (0'boardSeq');
 
/* 시퀀스 삽입 */
get_seq('boardSeq')
cs


mysql에서는 테이블을 생성하고, 변수 값으로 시퀀스와 같은 기능을 만들 수 있다.

위의 예처럼 순서대로 생성해주면, get_seq('boardSeq') 라는 값을 시퀀스처럼 사용 가능하다.


시퀀스 객체 초기화를 위해, 많은 방법이 있겠지만

나의 경우에는 위에서 "생성된 펑션 삭제" 구문을 실행해주고, 다시 생성해주는 방법을 사용했다.


mysql이 미숙한 모든 분들에게 좋은 팁이 되었으면 좋겠다.

1) 계층형 데이터베이스 : 데이터의 관계를 트리 구조로 정의하고, 부모와 자식 형태를 갖는 구조이다. 즉 상위의 레코드가 복수의 하위 레코드를 갖는 구조라고 할 수 있다.

 

 1-1) 데이터 간에 1:N 관계를 유지한다.

 1-2) 데이터가 트리 형태로 저장 되는 모델을 사용한다.

 1-3) 가장 오래됨

 1-4) 각 계층이 물리적 포인터로 연결 돼 있으며, 종속적 관계를 지닌다.

 

장점)

1/ 부모, 자식 노드 사이에 항상 연결 될 수 있기 때문에 1:N 관계를 갖는 대용량 데이터베이스 처리에 매우 강력하다.

2/ 데이터베이스 무결성 조건에 대해 좋은 성능의 관리가 가능하다.

 

단점)

1/ 한 번 구축하면 구조를 변경하기 어렵다.

2/ 트리 구조 내에서는 순환이 불가능하다.

3/ 데이터 저장의 물리적 구조에 대한 이해도가 높아야 한다.

4/ 계층형 구조 상의 한계로 1:N 기준에 맞지 않는 일반적 관계를 구현하기 어렵다.

 

 

2) 네트워크형 데이터베이스 : 계층형 데이터베이스에서 나타나는 중복 문제를 해결 해결 했고, 레코드 간의 관계가 그물처럼 되어 있는 구조이다. 하지만 이러한 복잡한 구조 때문에 추후에 구조를 변경 할 경우 많은 어려움이 따른다.

 

 2-1) 데이터 간에 N:N 관계를 유지한다.

 2-2) 망 형태로 구성된 모델을 사용하며 계층형 트리를 확장한 형태다.

 2-3) 레코드 간의 관계가 링크로 표현 되는 점은 계층적 모델과 유사하나, 구조는 순환을 허용한다.

 

장점)

1/ 계층 구조에 링크를 추가하여 유연성과 접근성이 우수하다.

2/ 데이터 추출이 빠르고 효과적이다.

 

단점)

1/ 유지 및 보수 비용이 많이 든다.

2/ 프로그램 작성 시 프로그램의 구조를 이해해야만 작성이 가능하다.

3/ 데이터베이스 구조 변경 시에 이를 참조 했던 모든 응용 프로그램에 대한 수정이 필요하다.

 

 

3) 관계형 데이터베이스 : 우리가 흔히 표현하는 행(Column), (Record)로 구성된 테이블 간의 관계를 나타낼 때 사용한다. 이렇게 표현된 데이터를 SQL(Structured Query Language)을 사용하여 데이터를 관리 및 접근 한다.

 

 3-1) 데이터 간 1:1 관계를 유지한다.

 3-2) 데이터가 2차원 구조의 테이블로 구성된 관계형 모델을 사용한다.

 3-3) 한 테이블은 다수의 열로 구성된다.

 3-4) 각 열은 레코드 단위로 구성된다.

 3-5) 데이터 간의 연결은 키의 중복으로 생성된다.

 3-6) 현재 판매 되는 대부분의 DBMS

 

장점)

1/ 다양한 용도로 사용이 가능하고, 범용적이며 고성능이다.

2/ 데이터의 일관성을 보증한다.

3/ 정규화에 따른 갱신 비용 최소화

4/ 다른 DB로의 변환이 용이하고, 간결하며 판독이 용이하다.

5/ 네트워크, 계층형에서 발견되지 않는 구조적 독립성을 가진다.

 

단점)

1/ 대량의 데이터 입력 처리

2/ 갱신이 발생한 테이블의 인덱스 생성 및 스키마 변경

3/ 컬럼 확장의 어려움

4/ 단순히 빠른 결과

5/ 데이터 종속성, 구조적 종속성 및 강력한 질의 처리의 장점을 해결하기 위해 실제적인 하드웨어와 운영체제 등의 오버헤드가 필요시 된다.

 

 

4) NoSQL데이터베이스(Not-Only SQL) : 관계형 데이터베이스보다 덜 제한적인 일관성 모델을 사용한다. (key)와 값(Value) 형태로 저장 되고, 키를 사용해 데이터를 관리 및 접근 한다.

 

장점)

1/ 대용량 데이터

2/ 데이터 분산 처리

3/ 클라우드 컴퓨팅

4/ 빠른 읽기 및 쓰기

5/ 유연한 데이터 모델링

 

종류)

1/ key – value Model : 휘발성 / 영속성

2/ Big Table(Column ) DB

 

5) 객체 지향 데이터베이스 : 정보 은닉, 상속성, 다형성 등을 포함 하며, 데이터베이스로서 오브젝트 식별자와 오브젝트 관계와 같은 추가적 특징을 지닌다.

 

+ Recent posts