Shutdown되어있는 Database를 Startup 시키면, 제일먼저

 

1. 초기 파라미터 파일을 읽는다.

   9i~ 부터는 Spfile이 default로 설정되어 있다.

   ~8i version까지는 default값이었음.

 

 

Server Parameter File(9i~)

Initialization Parameter File(~8i)

 명칭

 Spfile

Pfile 

 File Name

spfile[SID].ora

pfile.ora 또는 pfile[SID].ora 

 구조

 Binary

 Text

 형식

 동적(Dynamic)

정적(Static) 

 파라미터 설정법

 SQL> Alter system set 파라미터명 = value

[scope = memory | spfile | both]

 $ORACLE_HOME/dbs/initSID.ora file vi편집기로 수정한다

 파라미터 수정

 DB 운영중 수정가능( 일부 파라미터 제외)

 Shutdown 후 pfile수정해야함

 생성법

 SQL> Create spfile from pfile;

SQL> Create pfile from spfile; 

 위치

WIN : $ORACLE_HOME\database\

UNIX : $ORACLE_HOME/dbs/

 

WIN : $ORACLE_HOME\database\

UNIX : $ORACLE_HOME/dbs/

 

 

* 인덱스 설계 조건

1. 조건을 만족하는 데이터의 분포도가 10% 내외일 때 인덱스를 생성하면 가장 이상적인 성능이 보장 될 수 있다.

2. 대용량 데이터를 가진 테이블에 적용했을 때 가장 이상적이다.

3. 분포도가 나쁘더라도 FAST INDEX SCAN이 가능한 경우라면 인덱스를 생성해도 좋다.

4. 다양한 인덱스 유형 중에 가장 적합한 인덱스를 선택하라

5. 인덱스가 생성되는 테이블스페이스와 물리적 크기 설꼐에 대해서 충분히 고려하라.


'Modeling' 카테고리의 다른 글

모델링 해야할일  (0) 2017.05.08
7. 테이블의 물리적 설계  (0) 2017.05.07
6. 물리적 데이터 모델링  (0) 2017.05.06
5.3 역정규화  (0) 2017.05.06
5. 논리적 데이터 베이스 설계  (0) 2017.05.04

1. Master Detail Pattern

 관계형 데이터베이스의 실체 간 관계에서 가장 많이 볼 수 있는 보편적인 관계 중 하나이다.

 반드시 Master 관계를 가지는 실체에 종속 관계를 가짐.

 

1.

논리 ERD를 보고 어떻게 하면 새롭게 추가하고, 제거할 수 있을찌

모델링책 : 4.3 기타 모델링 다시 보고 생각! (아이디어!)                :  (토요일까지 : 1시 스터디!)

 

2.

실제 데이터를 넣을 스크립트 작성   :  (월요일까지)

 

3.

이것을 눈에 보일 수 있게 문서화 시킬 것.

 

 

영석, 보규, 은지 :

재원, 지호형 : 시스템(DB구축)

 

 

 

* 병원 문서 : 전부 보고 어떤 점을 수정할지를 찾아낼 것 (그리고 수정하는 이유를 꼭 작성할 것. : '정규화 이론에 의해서 -을 수정한다')

- 요구사항 명세서

- 속성 정의

- 도메인 정의 (데이터 타입 및 등등)

- 논리 ERD

- 프로세스 모델링

- CRUD MATRIX

 

* 모델링 책 읽기

 

* 병원문서 + 모델링 책을 같이 펴놓고 어떻게 적용하면 좋을지 책 내용을 토대로 어떻게 변경 할 수 있을지 확인하기.

 

 

'Modeling' 카테고리의 다른 글

8. 인덱스의 물리적 설계  (0) 2017.05.09
7. 테이블의 물리적 설계  (0) 2017.05.07
6. 물리적 데이터 모델링  (0) 2017.05.06
5.3 역정규화  (0) 2017.05.06
5. 논리적 데이터 베이스 설계  (0) 2017.05.04

https://www.couchbase.com/ 

'Couchbase' 카테고리의 다른 글

Couchbase소개  (0) 2017.05.07

http://bcho.tistory.com/924

 

모바일 게임중에 유명한 쿠키런의 경우 카우치베이스를 백엔드로 사용하고 있다.

 

장점 :

1. 안정성

2. 성능이 뛰어남

3. 사용이 쉬움

4. 고성능 NoSQL서버이다.

 

Couchbase설치하기

1. www.couchbase.com에서 카우치베이스를 맞는 OS 플랫폼에 따라서 다운로드

   - Enterprise Edition과 Community Edition이 있는데, Enterprise Edition은 별도의 상용 라이센스를 구입해야 하며 기술 지원등을 받을 수 있다. Community Edition은 무료로 개발이나 운영 환경에 사용할 수 있으나, 기술 지원등을 받을 수 없고,  Enterprise Edition에 비해서 버전이 낮다.

2. 사이트에서 카우치베이스 server 를 다운로드 받고 실행을 하면 자동으로 설치 위자드가 실행되고, 설치가 진행된다.
3. 설치가 끝나면 자동으로 웹페이지 열리면서 카우치베이스에 대한 셋업이 시작됨.

 

4. 데이타 파일을 저장하는 경로와, 호스트명등을 물어본다.그리고 새로운 클러스터를 시작할지, 아니면 기존의 클러스터에 조인할지를 물어보는데, 여기서는 개인 개발 환경을 설정하는 것이기 때문에, “Start a new cluster”로 설정한다

5. 메모리 용량 지정 : 1GB (실습용)/ 실 개발 환경에서는 메모리를 최대한 크게 잡아줘야 한다.

 카우치베이스에 저장되는 키와 데이터에 대한 메타 데이터는 모두 메모리로 로딩되기 때문에 메모리 용량이 충분하지 않으면

 제대로된 성능을 발휘할 수 없다.

6. install 완료 후 카우치 베이스에 웹 콘솔을 열어보면, 인스톨된 카우치 베이스 서버의 상태를 볼 수있다. 

 

 

 

http://cafe.naver.com/couchbase : 카우치베이스 교재 출간

 

'Couchbase' 카테고리의 다른 글

카우치베이스 홈페이지  (0) 2017.05.07

개념적 데이터 모델링과 논리적 데이터 모델링을 통해 만들어진 테이블을 어떻게 설계 하는지에 대한 물리적 설계 방법이다.

 

7.1 테이블 설계시 주의사항

  1. 블록 영역을 위해 initial , Next parameter를 충분히 고려하라.

  2. 저장 될 tablespace를 반드시 지정한다.

  3. data의 실시간 복구가 요구되지 않는 경우 LOGGING절을 사용하지 마라.

  4. 필요한 경우 CACHE절을 사용하라.

 

 3) data의 실시간 복구가 요구되지 않는 경우 LOGGING절을 사용하지 마라.

  이 말은 우리가 DML문(update, delete, insert)를 실행하게 되면 변경 전 데이터 + 변경 후의 데이터가 SGA의 Redo log buffer cache영역에 저장

  되어 있다. 이는 뜻하지 않는 상황에 대비하여 데이터의 손실을 방지 하기 위함이다. 또한 데이터를 백업해주는 공간 이기도 하다.

  이처럼 개발자들이 생성하는 모든 테이블들은 위와 같은 싸이클에 의해 작업 내용들이 데이터베이스 내에 저장되는데

  이것을 테이블의 LOGGING모드 라고 표현한다. 반대는 NOLOGGING모드라고 한다.

   * LOGGIN mode 설정 방법

       SQL> create table test (no number) LOGGING;  : logging이라고 작성해주지 않아도 기본값은 logging 모드로 생성이 된다.

   * NOLOGGIN mode 설정 방법

       SQL> create table test (no number) NOLOGGING;

       SQL> alter table test NOLOGGING;    : nologging 모드로 변경한다.

 

  4) 필요한 경우 CACHE절을 사용하라.

   이 말은 자주 사용되는 데이터들이 버퍼 캐시 영역으로 Loader(읽혀져서 올라감)되면 다른 사용자의 작업에 의해 메모리로부터 지워지지않도록

   CACHE(캐시) 시켜주는 기능을 뜻한다. Data buffer cache는 제한된 공간이기에 사용자들이 조회 또는 변경하는 데이터들이 항상 그곳에 상주할 수

   없고 덮어씌여지기 때문에 자주 사용하는 데이터는 캐시 시켜두면 유용하다.

   * CACHE시키는 방법

       SQL> create table test (no number) CACHE;   : data buffer cache영역에 상주하게 된다.

   * NOCACHE시키는 방법

       SQL> create table test (no number)   : 기본 값은 NOCACHE이다.

 

 

7.2 테이블의 크기 설계

  1. 해당 테이블의 데이터 발생 빈도와 발생량을 분석해서 최초 요구되는 테이블의 크기를 산정하고,

     향후 요구되는 저장구조에 대한 전략수립에 이용된다.

  2. INITIAL은 최초 테이블의 크기를 , Next INITIAL 이후에 요구되는 저장구조의 크기를 결정한다.

 

개념적 데이터 모델링과 논리적 데이터 모델링을 수해하고 나면 테이블에 대한 논리적 구조(테이블명 /  컬럼명/ 데이터 타입/ 데이터 길이)들이

확정된다. 물리적 데이터 모델링 단계에서는 테이블을 생성할 때 얼마 만큼의 디스크 공간이 요구되는지, 향후 지속적으로 데이터가 저장되는지,

어떤 테이블스페이스에 생성할 지 분석한 뒤 최종적으로 테이블의 크기를 설계하게 된다.

 

블록 - 익스텐트 - 세그먼트 - 테이블스페이스 - 데이터베이스

 

블록 : 가장 작은 논리적 구조

        I/O의 단위를 결정하는 기준 값이다.

        기본크기 : 2, 4, 8, 16KB등

        오라클 블록의 크기는 데이터베이스를 처음 설치할때 결정됨. 설치 후에는 변경할 수 없다.

        하나의 블록 크기는 : init<DB명>.ora / spfile<DB명>.ora parameter파일에 정의되어 있는 DB_BLOCK_SIZE의 값에 의해 결정됨.

        하나의 블록은 헤드영역 / 데이터영역<실 데이터가 저장되는영역> 으로 구성됨.

 

익스텐트 :  테이블과 인덱스를 생성 시 사용자가 크기를 설정하지 않으면 오라클 서버가 제공하는 기본 크기 값으로 생성된다.

               할당된 첫 번째 공간을 : 최초 익스텐트 라고 한다.

 

7.2.1 테이블의 크기 계산

  1단계 : 요구되는 블록헤드의 총 크기를 계산한다. : 실체로 크기를 계산해 낼 수 있는 단계는 아니며 개념적 공식만을 추출할 수 있는 단계이다.

  2단계 : 하나의 블록 당 사용 가능한 데이터 영역의 크기를 계산한다.

  3단계 : 평균 행의 전체 컬럼의 길이를 계산한다.

  4단계 : 전체 행의 평균크기를 계산한다.

  5단계 : 한 개 블록당 저장할 수 있는 평균 행수를 계산한다.

  6단계 : 하나의 테이블에 요구되는 INITIAL 크기를 계산한다.


하나의 테이블을 생성하는데 몇 개의 블록이 필요할까? 그 갯수를 구하기 위해 가장 먼저 알아야 할 점은 테이블에 저장될 데이터의 크기이다. 테이블에 얼마만큼의 데이터가 저장될 것인지를 알아야하는데 이 정보는 분석단계에서 작성된 '수집장표 목록'과 같은 산출물이 필요하다.



Fixed Header : parameter값은 하나의 블록이 할당될 때 기본 정보를 저장하기 위해 반드시 요구되는 헤드 영역의 기본 크기. 기본값 : 75byte

Variable Transaction Header : 하나의 블록에서 하나의 트랜잭션을 처리하기 위해서 오버헤드(요구되는 여유공간)가 필요한데 이 크기를 의미한다. 

                                       기본값 : 23byte

Table Directory : 클러스의 테이블을 생성할 때 관련 정보를 저장하기 위해 요구되는 공간. 기본값 : 4byte 

Row Directory : 하나의 블록에 저장되어 있는 하나의 행마다 2byte가 요구된다. 즉 2 X 한블록의 평균 행 수 

INITRANS parameter : 하나의 블록에서 발생할 수 있는 트랜잭션의 최소 수를 제한하는 값.

MAXTRANS : 하나의 블록에서 발생하는 트랜잭션의 최대 수를 제한하는 값.

PCTFREE : 한 개 블록에 저장되어 있는 행을 변경하려고 했을 때 관련 행 정보를 같은 블록 내에 저장시키기 위해 미리 할당하는 여유 공간.


INITIAL prameter에 의해 테이블의 최초 크기를 결정할 때는 여러가지 기준을 설정할 수 있는데 , 하나의 익스텐트를 주단위/ 월단위/ 년단위로 크기를

설정할 수 있다. 만약 주 단위로 할당한다면 너무 작은 익스텐트가 너무 자주 할당되어서 저장공간에 대한 효율적 관리가 어렵다. 그리고 디스크 단편화 현상이 발생하기때문에 성능이 저하 될 수 있다. 만약 년 단위로 활성화 한다면 사용하지 않으면서 불필요한 디스크 공간을 확보하고 있기에 디스크 공간의 낭비가 될 수 있다. 일반적으로는 월 단위로 익스텐트가 활성화 될 수 있도록 저장 공간을 할당하는 것이 이상적인 형태가 된다.



7.2.2 OEM(Oracle Enterprise Manager)을 통해 테이블 크기를 예측한다.

 오라클 사에서는 10g version의 OEM을 통해 테이블의 크기를 예측하는 소프트웨어를 제공하고 있다.

생성할 테이블이름, 스키마명, 테이블스페이스명을 입력할 수 있고 컬럼명, 데이터타입, 컬럼의 길이 등을 입력하는 필드도 있다. 모든 정보가 입력되고

상단 부분의 테이블스페이스 필드 옆에 '테이블 크기 예측' 이라는 버튼을 클릭해서 미리 예측결과를 볼 수도 있다. 

RDBMS제품과는 별도의 라이센스가 요구되기 때문에 추가적인 비용이 발생하는 문제점이 있다. 또한 분석, 설계된 모든 테이블에 대해 물리적 크기를 계산할 필요는 없기 때문에 반드시 필요한 소프트웨어는 아니다. 



7.3 논-파티션 테이블과 파티션 뷰

 1980년대 : 데이터베이스 관리시스템의 도입

 1990년대 : 인터넷 환경의 급속한 도래. 기업의 데이터 양 증가.

 → 대용량 데이터의 저장과 관리는 컴퓨터의 성능을 저하시키고 + 백업 및 복구에 어려움. 해결방법으로 제안된 것 : 파티션 테이블


논 - 파티션 테이블 : '하나의 테이블은 반드시 하나의 테이블스페이스에 저장된다'는 논리적 구조를 말한다.

                           하나의 테이블이 하나의 테이블스페이스에만 저장되면 디스크 장치에 장애가 발생할 때 데이터 파일에 저장되어 있던 모든 

                           데이터를 참조할 수 없게 되는 경우가 발생하게 된다. 또한 데이터파일에 저장되어 있는 디스크레 많은 사용자가 동시 검색을

                           시도하면 '경합(Contention)현상이 발생하여 성능 저하 문제가 발생된다.


                           해결방법 : 파티션- 뷰 Data구조 : 여러개로 분리된 테이블을 하나의 테이블인 것처럼 결합하여 검색하는 객체




7.3.1 수직 파티션 테이블

파티션-테이블 : 하나의 테이블은 여러 개의 테이블스페이스에 저장된다. 라는 의미.

종류 : 2가지 

  1. 수직 파티션 테이블 : 칼럼의 성격에 따라 하나의 테이블을 여러 개의 테이블로 분리 + 설계 

  2. 수평 파티션 테이블 : 데이터 값을 기준으로 여러 개의 테이블로 분리 저장하는 설계 방법.

                               <단점 : 비용증가 / SQL문을 통한 구현에 많은 문제점을 갖고있음. / 테이블의 갯수 증가로인한 관리, 비용증가>


                                          

7.3.2 수평 파티션 테이블

 데이터 값을 기준으로 여러 개의 테이블로 분리된 데이터 구조.

 1. 범위 파티션 테이블 : 수평 파티션의 단점을 보완하기 위해 8i버전 부터 새롭게 이름을 변경하여 부르게됨.

                               논리적으로는 하나의 테이블이지만 입력되는 전표 날자 값에 따라 저장되는 테이블스페이스의 위치는 달라짐.


 2. 분할     


7.4 테이블 생성 스크립트의 작성

  



 

'Modeling' 카테고리의 다른 글

8. 인덱스의 물리적 설계  (0) 2017.05.09
모델링 해야할일  (0) 2017.05.08
6. 물리적 데이터 모델링  (0) 2017.05.06
5.3 역정규화  (0) 2017.05.06
5. 논리적 데이터 베이스 설계  (0) 2017.05.04

스키마란 ? :

 하나의 사용자(계정)가 생성한 모든 객체들을 일컫는 단어이다.

 다른의미로는 데이터베이스 사용자라고 해석 할 수 있다.

 

6.1.1 제약조건 (CONSTRAINTS)

 제약조건이란 : 데이터가 원치않게 입력/ 변경/ 삭제 되는 것을 방지하기 위해 테이블 생성 시, 혹은 생성 후 컬럼 단위로 설정할 수 있는

 제약된 조건을 말한다.

 데이터의 무결성(Integrity)를 보장하기 위한 방법 중 하나이다.

 

6.1.2 Primary Key : 식별키

 식별키란 : 해당 행을 다른 행과 구분해 주는 대표 컬럼이다.

 식별키는 하나의 테이블에 Only 하나만 존재.

 식별키를 정의하면 인덱스는 자동으로 생성 된다.

 제약조건을 설정할 떄는 반드시 CONSTRAINTS 절과 함께 제약조건 명을 부여해야 한다.

 

 PK 생성 예)

   SQL> create table dept

            ( deptno number(5) constraints dept_deptno_pk PRIMARY KET ,

              name varchar2(15) );

  여기서 dept_deptno_pk 는 제약조건명인데 제약조건 명을 부여하지 않아도 자동으로 생성 된다.

 

제약조건 확인 예문)

  SQL> select constraint_name from user_constraints ;  : 이렇게 조회하면 제약조건 명이 출력되어 나옴.

 

이미 생성되어있는 테이블에 제약조건 추가 예문)

  SQL> alter table dept add (constraint dept_deptno_pk PRIMARY KEY(deptno));

 

 

6.1.3 Foreign Key (참조키)

 1. 부모 / 자식 테이블 간에 행들의 무결성을 보장하기 위한 제약조건이다.

 2. 부모 테이블 컬럼에 존재하지 않는 값을 입력 또는 변경할 수 없다.

 3. 부모 테이블은 참조를 허용하고 자식테이블은 참조하게 된다.

 4. 부모 테이블이 먼저 생성 되어 있어야만 걸 수 있는 제약조건이다.

 5. 자식 테이블의 FK 컬럼에 대한 부모테이블 컬럼은 반드시 PK제약조건을 가져야 한다.

 

 

6.1.4 Unique Key (유일키)

 1. PK가 아니더라도 컬럼의 모든 값이 유일해야 하는 경우 사용한다.

 2. 중복된 행이 존재할 수 없다. 하지만 NULL값은 허용 가능하다.

 3. PK와 같이 Index가 자동 생성된다.

 4. 하나의 테이블에 여러개의 유일키를 생성할 수 있다.

 

6.1.5 Check

 1. 컬럼에 입력되는 데이터를 검사해서 조건에 맞는 데이터만 입력 할 수 있다.

 2. 조건으로는 데이터 값의 범위/ 특정 패턴의 숫자/ 문자 값을 설정 할 수 있다.

 

6.1.6 NOT NULL

 1. 해당 컬럼에 NULL값이 저장되어서는 안될 경우 사용한다.

 2. COLUMN-LEVEL 방법으로만 정의할 수 있다.

   column level방식은 칼럼명 옆에 제약조건을 정의하는 방법이다.

   table level 방식은 모든 컬럼들을 정의한 후 제약조건은 따로 정의하는 방법이다.

3. PK와 Unique Key는 기본적으로 NOT NULL조건을 가지고 있다.

 

 

6.2 테이블 설계서

    작성 방법

 

 1. 관련 업무 : 프로젝트 명 또는 개발 업무명을 기록한다.

 2. DB 사용자 계정 : 해당 테이블과 인덱스를 생성하게 될 테이터 베이스 사용자명을 기록한다. (scott user 또는 SYS 유저 처럼)

 3. 테이블명 (영문) : 영문 테이블 명을 기록한다. 표준화 원칙과 지침에 의해 결정하고 12문자 이내로 작성하여 이해하기 쉽도록 한다.

 4. 테이블명 (국문) : 영문 테이블 명만으로는 테이블에 대한 용도를 쉽게 이해할 수 없기 떄문에 한글 테이블 명을 기록한다.

 5. 영문 컬럼명 (국문) : 영문 컬럼명에 대한 한글 컬럼명을 기록한다.

 6. 제약조건 : 사용한 제약조건을 기록한다. 유형은 되도록 간결하게 작성한다.

 7. NULL여부 : 해당 컬럼이 NULL을 허용하면 NULL이라고 작성 / 허용하지 않으면 NOT NULL이라고 기록한다.

 8. FK 테이블 : 테이블 간의 관계에서 참조하는 테이블을 의미한다. (부서 테이블은 사원 테이블의 FK테이블에 해당된다.)

 9. FK 컬럼 : FK테이블에서 관계되는 컬럼 명을 기록한다.

 10. DATA 타입 : 각 테이블의 컬럼에 부여된 데이터의 타입을 기록한다.

 11. 데이터길이 : 각 컬럼에 정의된 데이터의 길이를 기록한다.

 

※ 테이블 설계서 작성시 주의 사항

 테이블 설계서를 작성할 때는 식별키(PK)를 가진 테이블을 먼저 작성하고 외부키(FK)를 가진 테이블을 나중에 작성하는 것이 효과적이다.

 

 

 

6.3 테이블 생성 스크립트

  테이블 설계서가 작성되고 나면 개발자들에게 전달되고 개발자들은 테이블을 생성하기 위한 '테이블 생성 스크립트'를 작성한다.

 * 방법 :

  1. SQL * PLUS 툴에서 create table 명령어로 하나하나 다 실행한다.

  2. 운영체제 상에서 스크립트 형태로 문장을 미리 작성하여 SQL *PLUS 툴에서 일관 실행 한다.

 

 

 

6.4 시스템 개발 절차에 대한 이해

 

 DB를 구축하는 것보다 더 중요한 것은 '설계' 이다.

 만약 기업에서 하나의 시스템을 구축한다고 가정 했을때

 1. 프로젝트 기획자 : 예산을 수립하고 , 관련 담당자를 선정한다.

 2. 조직을 편성하고 업무에 대한 조사 + 진행 : 개발 범위를 결정하고 데이터에 대한 수집

 3. 가장 적합한 하드웨어 + 소프트웨어 선정 : 어떤 회사에서 판매하는 제품이 적정한지 검토한다.

 4. 구현

 

 

 

6.5 논리적 구조 알기

 논리적으로 데이버 테이스를 구성하는 단위는

 Block → Extent → Segment(테이블, 뷰, 인덱스) → Tablespace → Database

 

 데이터 베이스를 생성하면 기본적으로 4개의 테이블 스페이스가 생성된다.

 1. SYSTEM : system tablespace는 오라클 데이터베이스의 논리적 구조를 구성하는 필수 공간이다. 모든 Data Dictionary view가 저장되어있다.

 2. SYSAUX : sysaux tablespace는 10g 버전부터 등장했으며 오라클 서버의 성능 튜닝을 위한 데이터가 저장되어있는 공간이다.

 3. UNDO : user 가 사용한 명령문들이 기록되며, rollback할 수 있는 데이터 정보를 담고 있는 공간이다.

 4. TEMP : Sort(정렬)시 필요한 공간 +  임시 테이블이 저장되는 공간

 

 

 

6.6 테이블스페이스 설계

 오라클 데이터베이스를 설치하면 기본적으로 4개의 테이블스페이스가 생성되는데 이 기본적인 테이블스페이스에는

 유저가 생성한 데이터들을 저장할 수 없기 때문에 추가적으로 테이블 스페이스를 생성해 주어야 한다.

 

6.6.1 데이터 파일의 설계

 

 

 1. 데이터 테이블스페이스와 SYSTEM 테이블스페이스는 분리하라.

   - 사용자가 생성한 테이블들이 새로운 익스텐트를 할당 / 삭제 될 때 ,

     모든 변화에 대한 상태정보를 자료사전 테이블에 저장한다.

     SYSTEM 테이블스페이스는 실시간 지속적으로 DISK I/O가 발생하기 떄문에 사용자가 생성한 데이터들까지 함께 저장할 경우

     더 많은 부하를 일으키게 됨으로 따로 테이블스페이스를 생성해서 그 곳에 저장해야 한다.

 

2. 데이터 테이블스페이스와 인덱스 테이블 스페이스는 분리하라.

   - 수많은 인덱스와 테이블이 저장되어 있는 디스크에, 두가지 테이블 스페이스가 같이 있을 경우, 인덱스를 읽고 데이터 테이블을 검색을 할때

     수많은 사용자들이 동시에 읽기 작업을 수행하게 되면 빠르게 검색을 하지 못하고 순차적인 검색을 하게 될 수 있으므로

     성능 저하 현상을 유발하게 된다. 그래서 인덱스 테이블 스페이스와 데이터 테이블 스페이스는 물리적으로 다른 공간에 위치해 있어야 한다.

 

3. 각 데이터 테이블스페이스는 I/O경합을 줄이기 위해 분리하라.

   - 가능하다면 각각의 데이터 파일들을 물리적으로 다른 디스크 공간에 저장하는 것이 I/O를 분산시켜 줄 수 있는 최적의 방법이다.

     ※ 자주 사용되는 데이터 파일들은 반드시 같은 디스크에 생성하지 않을것!!

 

4. 하나의 테이블스페이스를 생성할때는 하나의 데이터 파일을 크게 만드는 것보다 여러개의 데이터 파일로 분리해서 생성 시켜 주는 것이

   부하를 줄이는 방법이다. 또한 백업 과 복구를 더욱 쉽게 할 수 있는 방법이기도 하다.

 

5.  데이터 테이블 스페이스와 UNDO 테이블스페이스를 분리하다.

  - 유저가 DML문(UPDATE, DELETE, INSERT)문을 실행할 때 변경 전 데이터를 일시적으로 기억해 두기 위해 UNDO segment를 할당한다.

    언두 세그먼트는 많은 사용자들이 공유하는 공간이기 떄문에 사용자가 생성한 데이터와 함께 저장하면 디스크 경합 현상이 발생 함으로

    반드시 분리 저장해야 한다.

 

6. 데이터 테이블스페이스와 TEMP 테이블스페이스를 분리하라.

   - TEMPORARY 테이블스페이스에는 사용자가 실행한 SQL문장이 저장되어있다. Sort작업을 실행할때 작업의 일부 결과를 잠시 저장하기 위해

     사용되는 공간이기 때문에 이 역시 많은 사용자들이 동시에 사용하는 공유영역이다. 그래서 TEMP테이블스페이스도 반드시

     데이터 테이블스페이스와 물리적으로 다른 디스크에 저장시켜 주어야 한다.

 

7. 대용량의 분류작업을 위해 TEMP 테이블스페이스를 각 사용자 별로 할당하라.

   - 오라클 서버를 설치하면 기본적으로 하나의 temp tablespace가 생성되는데 모든 사용자들이 하나의 공간을 사용하면 디스크 경합 현상이

     발생 하기 떄문에 TEMP 테이블 스페이스를 여러개 생성해서 데이터 베이스 내 사용자 계정을 생성 할 때는

     각 사용자마다 다른 temporary tablespace를 할당해 주는 것이 좋다.

 

 

 

 

6.7 사용자의 설계

 

 데이터베이스에서 다음과 같은 설계 기준에 의해 사용자를 생성한다.

 1. 업무별로 사용자 계정을 만드는 방법

 2. 전체 업무를 하나의 사용자로 관리하는 방법.

 

 **사용자를 생성할 떄 고려할 사항

   1. 성능

   2. 데이터베이스 설계 단계에서 고려해야 하는 효과적인 관리 문제

   3. 얼마나 많은 양의 데이터들이 존재 하는 업무환경인가에 따라서.

 

<사용자의 생성 설계 비교하기>

1. 업무별로 사용자를 따로 생성하는 경우

  - 사용자 계정은 테이블의 이름을 결정하는 기준이 된다.

  - 효과적인 관리가 용이해 진다.

  -백업시 특정 사용자를 기준으로 그 사용자가 소유한 모든 객체들을 백업 + 복구하게 된다.

  - 주로 대용량의 데이터를 저장 + 관리하며 많은 사용자들이 동시에 데이터베이스에 접속해야 하는 업무환경에서 가장 최적의 방법이다.

 

2. 전체 업무를 하나의 사용자로 생성하는 경우

  - 각각 다른 업무에서 사용되는 테이블과 객체들을 구별하기 위해서 반드시 테이블 명을 별도로 부여 해야만 한다.

      예) S_DEPT : S라는 접두어가 붙게되면 급여(salary)의 약자를 줄여서 썼다 라고 하던지..

  - 데이터베이스 백업 방법 중에 전체 백업(관련된 모든 테이블을 일괄 백업하는 방법)에만 적용할 수 있다.

  - 빠른 성능보다는 효과적인 관리가 더 요구되는 중소 규모의 데이터베이스 환경에 가장 최적의 방법이다.

 

  **기업에서 구축하는 DB환경

    1. 하나의 DB에 모든 업무의 데이터를 저장 + 관리하는 방법

    2. 단위 업무별로 여러개의 서버에 데이터베이스를 여러개 분산시켜 저장 관리하는 방법 : 분산 DB

 

 

 

6.7.1 사용자 생성

 

 

※ Default tablespace절에는 SYSTEM tablespace가 할당되지 않도록 조심한다.

   - default tablespace를 지정해주지 않으면 유저가 생성한 데이터들이 기본적으로 SYSTEM tablespace에 저장된다.

   Temporary tablespace를 각 사용자마다 할당해 준다.

   - 여러개의 temp tablespace를 생성해서 각 사용자 마다 다른 temp tablespace를 할당하는 것이 DISK I/O를 줄이는 방법이다.

   tablespace에 QUOTA설정하지 않기.

   - quota절은 : 해당 사용자가 사용할 수 있는 데이터 파일의 크기를 제한할 떄 사용된다. 이것은 대용량 데이터를 저장 + 관리하는데

                     문제점을 일으킬 수 있기때문에 설정하지 않는 것이 좋다.

 

'Modeling' 카테고리의 다른 글

모델링 해야할일  (0) 2017.05.08
7. 테이블의 물리적 설계  (0) 2017.05.07
5.3 역정규화  (0) 2017.05.06
5. 논리적 데이터 베이스 설계  (0) 2017.05.04
개념적 데이터 모델링  (0) 2017.05.03

 

논리적 데이터 베이스 설계 단계에서는 역정규화 작업도 발생한다.

 

 * 역정규화 (DeNomalization) :

 

   

개념적 데이터모델링 단계 → 정규화 를 하고 나면 : 개념적 ERD가 작성된다.

논리적 데이터 델링 설계 단계 : 분석된 결과를 기반으로 관계형 데이터베이스 구조로 매핑하는 작업 을 수행하게 됨

그리고 나서

역정규화를 수행하게 되는데 , 역정규화는 테이블의 설계를 재구성하는 것이다.

이 과정에서 정규화 단계에서 추출된 실체(테이블)가 제거되기도 하고 , 분석 단계에서 언급되지 않았던 실체가 새롭게 추출 될 수도 있다.

이렇게 정규화 단계의 분석결과가 무시되고 시스템과 DBMS의 장점과 주요 특징을 기반으로 설계 구조가 바뀌는 단계를 역정규화 라고 한다.

 

※ 역정규화 단계는 정규화 과정처럼 반드시 수행해야 하는 필수 단계는 아니다! (사용자의 필요에 따라 요구되어지는 설계 단계.)

정규화 단계에서 분석된 ERD를 기반으로 데이터베이스의 성능 향상과 효과적인 관리를 위해 정규화에 위반되는 설계행위를 일컫는 말이다

 

사진이나 대용량의 데이터가 저장되는 컬럼은 별도의 테이블로 분할 생성하게 되면 다른 컬럼 정보를 검색할 때 불필요하게 검색되는 것을

방지 할 수 있어서 DISK의 I/O를 감소 시킬 수 있고 , CPU의 성능을 높일 수 있다.

이렇게 하나의 테이블에 배치되어 있는 컬럼을 기준으로 유사한 컬럼들끼지 여러 개의 테이블로 분할하는 테이블 구조를 '수직 파티션 테이블' 이라고

(Verticality Partition Table)이라고 한다.

 

 

 

'Modeling' 카테고리의 다른 글

7. 테이블의 물리적 설계  (0) 2017.05.07
6. 물리적 데이터 모델링  (0) 2017.05.06
5. 논리적 데이터 베이스 설계  (0) 2017.05.04
개념적 데이터 모델링  (0) 2017.05.03
DA# Tool 용어 정리  (0) 2017.05.03

논리적 데이터 모델링 : 개념적 모델링 과정을 통해 만들어진 ERD(구조)를 DBMS가 처리할 수 있는 객체로 생성하는 과정이다.

                              즉, 개념적 모델링 단계를 거쳐 작성된 ERD와 DBMS를 매핑 시키는 작업을 수행하게 된다.



논리적 데이터 모델링 단계에서

 실체 : 테이블 : 관계형 데이터 베이스의 데이터 저장구조이다. 하나의 테이블은 여러 개의 ROW로 구성 됨.

 속성 : 컬럼 : 하나의 ROW를 구성하는 구성요소이다. (ex : 사원번호, 사원명, 월급, 직업 등등..)

 식별자 : 식별키 : 테이블에서 각 행을 유일하게 구분 할 수 있는 칼럼을 의미함.

 관계 : 외부키 등으로 매핑된다 : 하나의 테이블에 존재하는 컬럼 값으로는 그 의미를 해석할 수 없는 경우 다른 테이블의 식별키 칼럼을 반드시

                                          참조해야만 해석되는 칼럼을 의미함.

 필수항목 : NOT NULL : 분석단계에서 필수 속성은 NOT NULL로, 옵션 속성은 NULL로 매핑된다.!

 

5.1 매핑(Mapping) 규칙

 

ERD의 Entity명을 : Table 명으로 사용하는 것이 좋다.

                         table명과 colum명은 영문으로 작성하고 표준지침에 의해 너무 길지 않게 작성한다.(8-12문자 내)

 

* 표준화의 원칙과 표준화 지침

 <표준화를 하지 않으면 발생하는 문제점>

  1. 유사한 단어를 혼용하여 사용함으로써 의사소통이 결여 될 수 있다.

  2. 동일한 데이터가 중복 설계되어 공간의 낭비를 유발시킬 수 있다.

  3. 분석 + 설계시 불필요한 시간을 낭비할 수 있다.

 

 <표준화를 하면 얻는 이점>

  1. 통일된 단어 사용으로 원활한 의사소통 가능.

  2. 정제된 규칙에 의해 업무를 분석 + 설계 + 구축 할 수 있기에 시스템의 품질을 향상시킬 수 있다.

  3. 시스템의 유지보수를 위한 시간 + 비용 절약 가능

 

표준화를 하려면, 표준화를 수행하기 위한 큰 테두리가 필요하다.

 

이와 같이 이런 테두리 안에서 테이블과 컬럼의 이름을 결정하고,

한글 테이블명과 컬럼 명을 영문명으로 변환하는 작업도 수행하게 된다.

 

 

 

* 표준 단어와 표준 용어

 하나의 기업 내에서 사용되고 있는 단어들 중에는 표준 용어와 금칙 용어, 이음동의어도 있다. 이런 표준 용어에 대한 영문명을 결정할 때

단어가 결합되어 있는 경우 동일한 한글 단어이지만 영문 명이 다르게 표현되는 경우도 발생한다.

 

예를들어 '사원 번호' 라는 표준용어에는 사원 + 번호 라는 2개의 단어가 결합되어서 생성된 것이다.

이것을 영문으로 바꾼다면 EMP_NO(사원 번호) 가 될 수 있게 된다. 만약 '고객 번호'라는 표준 용어는 고객+ 번호가 합쳐서 영문으로는

CUST_ID(고객번호)가 될 수 있다. 그런데 한글명으로는 동일한 의미의 '번호' 라는 단어가 어떤 곳에서는 NO로 표현하지만 다른 곳에선 ID로

표현 될 수도 있어 문제가 발생되기도 한다.

※표준 용어에 대한 표준 단어는 업무 상 사용되는 단어를 최소한 단위로 분할하는 것이 원칙이다.

 

 

 

5.2 속성을 컬럼으로 매핑하기.

 1. ERD에서 정의된 속성은 논리적 데이터베이스 모델링 단계에서 Colum으로 매핑된다.

 2. 개발자의 혼돈을 피하기 위해선 표준화 지침에 의해 영문 약어를 사용하라.

 3. SQL언어의 예약어를 컬럼명으로 사용하지 말라.

     -  컬럼명을 sql언어에서 제공하는 예약어(select, update, insert, delete)로 사용하게되면 sql문을 구현할 떄 제대로 작성할 수 없다.

        실행도 불가하게 됨.

 4. 가능한 컬럼명을 짧게 부여하되 사용자의 편리를 도모 하라.

     -  최대 길이 ,  최소 길이를 정하고 원칙에 부합하는 명으로 결정 할 것.

 

 

5.2.1 식별자를 Primary-key로 매핑하기.

 1. ERD에서 정의한 UID(식별자)는 논리적 DB설계 단계에서 PRIMARY-KEY로 작성되고 보조 UID는 UNIQUE로 작성된다.

 2. Primary-key와 Unique키는 구현 단계에서 '인덱스'로 생성됨.

     - 인덱스가 자동 생성된다.

 3. 여러개의 속성으로 구성된 Primary key와 Unique키의 컬럼 순서는 데이터의 빠른 검색을 결정하기 떄문에 컬럼간의 우선 순위를 결정해야함.

     - 관계형 데이터 베이스에서 인덱스의 용도 : 빠른 검색을 위함.

       빠른 검색을 위해서는 효과적으로 데이터를 저장해 두었다가 필요에 따라 검색할 수 있어야 한다.

       하나의 속성이 하나의 식별자로 생성되는 경우에는 식별자와 속성이 같은 의미를 가지고 있기에 데이터를 검색할 때 문제가 없지만

       여러개의 속성이 하나의 식별자고 설계된 경우에는 식별자를 구성하는 속성의 우선 순위는 데이터를 저장하는 방법뿐 아니라 검색속도에 영향을

       미치기에 충분한 분석 + 설계 후에 결정해야한다.

 

   ** 인덱스 생성 시 컬럼 우선순위가 성능에 미치는 문제

       - 결합 인덱스를 생성할 때  어떤 컬럼을 인덱스의 선행 컬럼으로 결정하느냐는 매우 중요한 문제가 된다.

         일반적으로 자주 사용되는 컬럼을 선행 컬럼으로 결정하게 된다. 만약 사용빈도의 차이가 별로 없다면 데이터의 분포가 넓은 컬럼 보다는

         좁은 컬럼을 선행컬럼으로 선정하는 것이 좋다.

         예를들어, 사용빈도가 비슷하다는 가정 하 DEPTNO(부서 번호)컬럼과 JOB(직업)컬럼 두가지 중에 서는 JOB컬럼을 선행컬럼으로 두는 것이

         좋다.  이유는 deptno컬럼에는 무수히 많은 숫자들이 있고 하나의 사원은 하나의 부서에 다 연결되어있다 그러면 데이터를 찾는데에 시간이

         더 오래 걸릴 수밖에 없다. 하지만 job컬럼은 drptno컬럼에 비해 데이터의 분포도가 좁기 때문에 훨씬 수월하게 데이터를 찾을 수 있다.

 

 

  ** 결합 컬럼 인덱스 생성 시 선행컬럼 결정하는 기준.

       - 결합 컬럼 인덱스 : 여러개의 컬럼을 묶어서 하나의 인덱스 생성.

    

         1. where절에서 자주 검색되는 컬럼이 선행 컬럼이 되어야 한다. (where절에서 사용 가능 할 수 있어야 함)

 

        

         2. 분포도가 좋은 컬럼이 선행 컬럼이 되어야 한다.

           인덱스를 생성하려는데 모든 컬럼들이 다 자주 검색된다면 인덱스를 생성할 필요가 없을 것이다. 이런경우엔 분포도가 좋은 컬럼을

           선행 컬럼으로 선택해야 한다.

 

         3. 데이터 양이 적은 컬럼을 선행으로 사용해야 한다.

           위의 1, 2번 만으로는 성행컬럼을 결정하기 어려운 경우는 이 방법을 사용한다.

           데이터의 양을 비교 분석해서 양이 적은 것이 더 빠르게 검색 할 수 있기에 양이 적은 컬럼으로 사용한다.

 

         4. BEETWEEN > AND > LIKE 연산자로 검색되지 않는 컬럼을 선행 컬럼으로 사용한다.

           이러한 비교 연산자들은 여러개의 컬럼으로 결합 컬럼 인덱스가 생성되어 있는 경우 첫번째 순서로 지정되어 있는 컬럼의 조건 만으로

           비교 검색하기 때문에 여러개의 조건으로 검색되는 경우 검색 조건을 만족하지 않는 데이터들까지 검색하기에 문제점이 발생됨.(성능저하)

 

 

 

5.2.2 관계를 Foreign Key로 매핑하기.

 1. 개념적 데이터 모델링 단께에서 설정된 관계를 논리적 모델링 단계에서 PK와 FK로 매핑된다.

 2. 순환  관계형 데이터 모델에서 자신의 LK를 FK로 정의한다.

    - 관계형 데이터 베이스에서 2개의 table이 1:N의 관계를 가지게되면,

      1의 관계 차수를 가지는 table 컬럼이 PK가 되고 N의 관계 차수를 가지는 table이 FK가 된다.

    - 1 : 1관계에서는 두 table중 더 자주 사용되는 테이블이 PK를 갖게 된다.

 

 

5.2.3 표준 코드의 정의

 

 

5.4 데이터 베이스의 데이터 타입

 오라클에서 제공하는 데이터 타입의 종류는 크게 3가지로 나뉠 수 있다. 오라클 8 version부터 이 3가지 유형이 제공되고 있음.

 1. 스칼라 타입 : 하나의 데이터 타입 컬럼에 오직 하나의 데이터 값만을 저장할 수 있는 유형

 2. 모음 타입 :  C, COBOL 언어의 배열 변수와 같이 여러개의 데이터 값을 저장할 수 있는 유형

                     - 객체 지향 데이터 베이스 / 객체 관계형 데이터베이스 기술에서만 사용할 수 있는 데이터 타입.

 3. 관계 타입 : 관계형 데이터베이스의 외부키(FK)와 같이 다른 테이블과의 관계에 의해 데이터 타입이 정의되는 관계 타입.

                     - 객체 지향 데이터 베이스 / 객체 관계형 데이터베이스 기술에서만 사용할 수 있는 데이터 타입.

 

→ 관계형 데이터 베이스 에서 사용할 수 있는 타입은 '스칼라 타입' 한가지 뿐이다.

 

 

 

5.4.1 SCLAR 타입

 1. CHAR 타입

   문자 값을 저장할 수 있는 유형

   고정길이 데이터를 저장 할 때 사용한다. 하나의 컬럼에 최대 2000 BYTE 문자 값을 저장 할 수 있다.

   자리수를 지정하지 않으면 무조건 1BYTE가 지정됨. 값을 입력하지 않으면 자동으로 NULL값이 저장된다.

      *고정 길이 데이터란 : 지정된 크기에 못 미치는 데이터가 입력되더라도 나머지 공간은 공백(SPACE)로 채워져서 저장됨.

 

 2. VARCHAR2 / NVARCHAR2 타입

   문자값을 저장할 수 있는 유형

   가변길이 데이터를 저장할 때 사용한다. 하나의 컬럼에 최대 4000 BYTE 문자 값을 저장 할 수 있다.

   디스크 공간 절약 될 수 있고 검색 시에도 저장된 공간 만큼만 읽기때문에 성능에 도움을 줄 수 있다.

      *가변 길이 데이터란 : 지정된 크기에 못 미치는 데이터가 입력되면 입력된 만큼의 저장공간만 사용되는 타입.

 

 3. NUMBER 타입

   정수, 소수 값을 저장할 수 있는 유형

   +, -38자릿수의 정수형을 저장 할 수 있고 NUMBER(P,S)타입은 소수점 데이터를 처리할 때 사용한다.

 

 4. DATE 타입

   날짜 유형을 저장할 수 있는 타입

   기본적으로 년/월/일 날자 포맥을 제공한다.

  

    *현재 데이터 베이스가 어떤 날자 포맷으로 설정 되어 있는지 확인하는 방법은 다음과 같다.

     SQL> select sysdate from dual;

     SQL> alter session set NLS_DATE_FORMAT = 'DD-MON-YYYY';   : 날자포맷 변경하기.

 

 5. TIMESTAMP 타입

   입력되는 데이터가 날자 유형이고 년/월/일 분:시:초 도 포맷 형태로 시간정보를 나타낼 때 사용하는 타입이다.

 

 6. TIMESTAMP WITH TIME ZONE 타입

   입력되는 데이터가 날자 유형이고, 현지 지역시간이 GMT(세계 표준시) 기준 시간과 얼마나 차이를 나타내는지를 보여준다.

 

 7. INTERNAL YEAR TO MONTH/ INTERVAL DAY TO SECOND 타입

   INTERNAL YEAR TO MONTH타입은 : 입력되는 데이터가 날짜 유형이고 정의된 년과 월만큼의 간격을 의미한다.

 

 8. LOB 타입 (Large Object)

   BLOB 타입은 : 입력되는 데이터가 이미지 유형(BMP와 같은 그래픽 데이터 또는 WAV, AVI와 같은 음악파일 등)일 때 저장할 수 있는 타입.

                      한번에 4GB의 이미지 데이터를 하나의 컬럼에 저장할 수 있다.

   CLOB 타입은 : 입력되는 데이터가 대용량의 텍스트 유형(DOC, TXT와 같은 문자 데이터 또는 HWP와 같은 워드 프로세스 파일 등)일때 저장할 수

                      있는 타입. 한번에 4GB의 텍스트 데이터를 하나의 컬럼에 저장할 수 있다.

 

 

5.4.2 데이터 타입의 부여

 개념적 모델링 단계를 거쳐 작성된 ERD를 기반으로 각각의 실체에 구성되어 있는 속성들에 대해서 적합한 데이터 타입을 부여해야 한다.

 논리적 데이터 베이스 설계 단계에서 속성에 대한 데이터 타입을 부여하기 위해서는 분석단계에서 작성 한 DATA항목 일람표를 참조해야 한다.

 

 

 

위와 같은 DATA항목 일람표가 설계 단계에서 속성들에 대한 데이터 타입을 결정할 때 결정적인 기초자료가 된다는 것을 확인 할 수 있다.

 

'Modeling' 카테고리의 다른 글

6. 물리적 데이터 모델링  (0) 2017.05.06
5.3 역정규화  (0) 2017.05.06
개념적 데이터 모델링  (0) 2017.05.03
DA# Tool 용어 정리  (0) 2017.05.03
ERD 작성방법  (0) 2017.05.01

+ Recent posts