Modeling

5. 논리적 데이터 베이스 설계

oraking 2017. 5. 4. 12:59

논리적 데이터 모델링 : 개념적 모델링 과정을 통해 만들어진 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항목 일람표가 설계 단계에서 속성들에 대한 데이터 타입을 결정할 때 결정적인 기초자료가 된다는 것을 확인 할 수 있다.