다연이네

[days10] 데이터베이스 모델링 본문

Oracle

[days10] 데이터베이스 모델링

 다연  2020. 11. 11. 21:46
반응형

데이터베이스 모델링
1. 데이터베이스(database) - 서로 관련된 데이터의 집합
2. DBMS - Oracle 11g XE(RDBMS)
3. 스키마(Schema) - scott 계정 생성 -> scott 스키마(객체....)
DB의 구조(객체, 속성, 관계 등)와 제약조건 명세를 기술한 것
4. DBA - 데이터베이스 관리자
5. DataBase System = DBMS + DBA/프로그래머 + 응용S/W

 

 

 

1.  데이터베이스(DB) 모델링 정의
   - 현실 세계에 존재하는 업무적인 프로세스를 파악해서 물리적으로 데이터베이스화 시키는 과정이다. 
   예)   쇼핑몰 운영
         제조업/매매상 -> 제품(상품) 구매 -> 구매관리
         고객(회원) 관리
         상품 판매 관리
         반품 처리
         상품평 관리
         등등

2. DB 모델링 순서( 절차 )
  1) 현실 세계 업무 프로세스 *****


  2) 개념적 모델링 - ER-Diagram ( ERD )
  
  3) 논리적 모델링 - 정규화              모델링 도구 : eXERD

  4) 물리적 모델링 - 컬럼 자료형, 크기 등등 구체적인 정의 
                           성능 - 역정규화, 인덱스 
  5) 실제 DBMS 에서 DB 생성 -> 필요한 데이터 저장 -> 본격적으로  웹/앱 개발      

 

3.  프로젝트 진행하는 전체 과정(단계)
  ㄱ. 계획(기획)
  ㄴ. 분석
  ㄷ. 설계 : DB모델링,   클래스 설계, 시스템 설계, 라이브러리 설계 등등
  --- 6개월 ---
  ㄹ. 구현( 개발 )
  ㅁ. 테스트
  ㅂ. 유지보수( 문제점 ) - 개선
  ㅅ. 상용화.

 

4.  DB모델링 [1] - 현실 세계 업무 프로세스 
  ㄱ. 관련 분야에 대한 기본 지식,상식 필요 + 교육
     예) 회계 프로그램 - 대차대조표, 자산, 부채, 손실 등등     
  ㄴ. 신입 사원 입장에서 파악 - 업무 자체와 프로세스 파악 중점
  ㄷ. 요령 - 서류, 장표, 보고서 이런 각종 문서들을  참조
  ㄹ. 담당자(실무자) 와 인터뷰 + 미팅
  ㅁ. 고객(클라이언트) 입장에서 파악 - 사용자 입장
       관리자, 실무자 입장에서 파악 - ( 백그라운드 프로세스 파악 )....
  
  -> 요구 분석서 상세하게 업무  프로세스 별로 작성.....   

5. DB모델링 [2] - 개념적 모델링 ( ER-Diagram 작성  )
  ㄱ. 정의 ? 현실 세계 업무를 좀 더 명확히 표현하기 위한  방법으로 
               널리 사용되는  개체( Entity ), 관계( Relation) 모델 
                                           E                R          Diagram

  ㄴ.  개념적 데이터 베이스 모델링이란 ?
 데이터 베이스 모델링을 함에 있어 가장 먼저 해야될 일은 사용자가 필요로 하는 데이터가 무엇이며 어떤 데이터를 데이터베이스에 담아야 하는 지에 대한 충분한 분석이다.
 이러한 것들은 업무 분석, 사용자 요구 분석 등을 통해 얻어지며 수집된 현실 세계의 정보들을 사람들이 이해할 수 있는 명확한 형태로 표현하는 단계를 '개념적 데이터베이스 모델링'이라고 한다.

  ㄷ. ER-Diagram
현실 세계를 좀 더 명확히 표현하기 위한 여러 방법 중 가장 널리 사용되고 있는 개체(E)-관계(R) 모델을 이용해 개념적 데이터베이스 모델링에 대해 알아보자.

  ㄹ. E-R Model
     1) 1976년 P.Chen이 제안한 것.
     2) 개체(E) 관계(R) 모델을 그래프 형식으로 알아보기 쉽게 표현한 것.
          직사각형 - 개체( Entity )
          타원       - 속성
          마름모    - 관계
          실선       - 연결
          언더라인(underline)  - 식별자

     예) [학생(Entity )]--------------<수강>---------[과정(Entity)]
             |                             Relational           |
          타원 - 학번 (속성 Attribute)                  과정코드번호(속성)           식별자( identifier)
          이름                                                 과정명
          주소                                                 과정기간
          연락처                                              과정내용
          키
          몸무게
          
   ㅁ.   실체 == 개체 == (Entity)
1) 업무 수행을 위해 데이터로 관리되어져야 하는 사람,사물,장소,사건등을 '실체'라 한다. 이 때 구축하고자 하는 업무의 목적과 범위,전략에 따라 데이터로 관리되어져야 하는 항목을 파악하는 것이 매우 중요.       
       예) 쇼핑몰      -  상품 구매 / 사용 후기 /   [point] 회원 ...... 관리.
       
2) 실체는 학생,교수 등과 같이 물리적으로 존재하는 유형으로 과목,학과 등과 같이 개념적으로 존재하는 대상이 될 수 있다.
        
  3) 실체는 테이블로 정의된다.
    
4) 실체는 인스턴스라 불리는 개별적인 객체들의 집합이다.
    
 예) 과목 : 자료 구조, 데이터베이스, 프로그래밍 등의 인스턴스들의 집합.
     학과 : 컴퓨터공학과, 전자공학, 국어교육학과 등의 인스턴스들의 집합.
         
5) 실체를 파악하는 요령 
 - 관련 업무에 대한 지식( 가장 중요 )
     
  예)
  학원에서는 학생들의 출결상태와 성적들을 과목별로 관리하기를 원하고 있다..
      (라고 업무 분석한 내용)      
  - 실체(명사들 파악) : 학원(체인점이 아니라면 뺀다 ), 학생, 출결상태,성적, 과목      
 -  각종 서류를 이용해서 실체 파악하는 것도 좋은 방법이다.        

  ㅂ.  속성(Attribute)
1) 속성이란 ? 저장할 필요가 있는 실체에 대한 정보.

    즉, 속성은 실체의 성질, 분류, 수량, 상태, 특성, 특징 등을 나타내는 세부 항목을 의미한다. 
        
2) 속성 설정 시 가장 중요한 부분은 관리의 목적과 활용 방향에 맞는 속성의 설정이다.
        예) 주소  == 배송지  기본/처가/본가/친구   여러 개 저장
        회원 실체 - 주소 속성
        주소 실체
    
3) 속성의 숫자는 10개 내외로 하는 것이 좋다.
    
4) 속성은 컬럼으로 정의된다.
    
예)
학생이란 실체의 속성 ? 업무프로세스에 따라 달라짐.
 학번, 이름, 주민번호, 전화번호,주소...
             
사원이란 실체의 속성 ?
사원번호, 사원명, 주민번호, 전화번호, 주소, 입사일자, 퇴사일자, 부서명...

    5) 속성(Attribute)  유형
        (1) 기초 속성 : 실체가 원래 가지고 있는 속성
           예) 학생 실체 - 학번/학생명                             /18나이/
                               주민등록번호
                집전화     02-1234-1234
                
                지역번호   02
                전화 1      1234
                전화 2       2343 
                
        (2) 추출 속성 : 기초 속성으로 부터 얻어질 수 있는 속성
                             예)  나이 , 생일,  성별 속성
                             집전화-> 추출속성 - > 지역번호
                             
        (3) 설계 속성 : 실제로 존재하지는 않지만 시스템의 효율성을 위해서 설계자가
                           임의로 부여하는 속성.                           
                  예)  배송 상태 ( 주문완료/ 결제완료/ 배송완료/ 배송중 (  )/  )
                  
          emp        pay   연봉          sal*12+nvl(comm, 0)        

    6) 속성 도메인 설정
 - 속성이 가질 수 있는 값들의 범위, 다시 말해 속성에 대한 세부적인 업무 , 제약조건 및 특성을 전체적으로 정의해

    주는 것을 '속성의 도메인 설정'이라 한다.
 - 도메인 설정은 추후 개발 및 실체를 데이터베이스로 생성할 때나 프로그램 구현 시 유용하게 사용하는 산출물이다.
 - 도메인 정의 시에는 속성의 이름, 자료의 형태, 길이, 형식, 허용되는 값의 제약 조건
     유일성(Unique), 널 여부, 유효값,초기값들의 사항을 파악해주면 된다. 
 - 도메인 무결성. : 데이터의 입력 형식이나 입력값등을 정의함으로써 잘못된 데이터가 입력되는 경우의 수를 방지  하      기위해 설정하는 것. 

  ㅅ. 식별자( Identifier )
  
  1) 식별자란?
한 실체 내에서 각각의 인스턴스를 유일(Unique)하게 구분할 수 있는 단일 속성 또는 속성 그룹. 실체 무결성.
        
2) 식별자가 없으면 데이터를 수정/삭제 못한다.    
그래서 모든 실체는 반드시 하나 이상의 식별자를 보여하여야하며 또한 여러 개의 식별자를 보유할 수 있다.
        
3) 식별자의 종류
    
(1) 후보키(Candidate Key)
실체에서 각각의 인스턴스를 구분할 수 있는 속성( 사원번호,주민번호) 
예) 사원 - 사원번호, 주민번호,사원명, 부서,주소
    
(2) 기본키(Primary Key)
후보키 중 가장 적합한 키. ( 사원번호 )
- 해당 실체를 대표할 수 있나? 업무적으로 활용도가 높나? 
            길이가 짧나? 등등의 만족하는 후보키 중 하나 선택.
( 중요 )
  기본키는 not null, no duplicate(중복성),unique,clusterd index 설정됨.

(3) 대체키(Alternate Key)
후보키 중 기본키로 설정되지 않은 속성( 주민번호 )
- index(인덱스)로 활용됨. 

(4) 복합키(Composite Key)
하나의 속성으로 기본키가 될 수 없는 경우 둘 이상의 컬럼을 묶어서 식별자로 정의한 경우.
- 복합키 구성시 고려사항. : 복합키 중 어떤 컬럼을 먼저 둘것이냐? 
이유: 복합키 중 먼저오는 컬럼에 index,unique가 적용되기에 성능 고려 때문.

        예) 급여 내역 실체
급여지급일 사번  지금일자 급여액
200901 1 30 10000
200901 2 30 10000
200902 1 30 10000
200902 2 30 10000

위의 기본키는 ? 없다. 
복합키 : 급여지급일 + 사번 
고려할 점 ) 어떠한 컬럼(속성)을 먼저 둘까? 
- 조회의 경우 : 사번, 급여지급일 중 어느 컬럼으로 조회가 많나? 
- 조회수가 비슷하다면 데이터의 입력 순서로 결정 : 당연 급여지급일자  우선 
( 아마 입력은 년/월/일 지급일자 순으로 계속 저장 될 것이다...)


(5) 대리키(Surrogate Key:서러게이트)
- 식별자가 너무 길거나 여러 개의 복합키로 구성되어 있는 경우 인위적으로 추가한 식별자(인공키).
- 이것도 역정규화 작업이다. 
            
예) 급여 내역 실체
         PK
[일련번호] [급여지급일  사번 ] 지금일자 급여액
1 200901 1 30 10000
2 200901 2 30 10000
3 200902 1 30 10000
4 200902 2 30 10000

- 일련번호라는 대리키를 추가해서 식별자로 사용. ( 성능,효율성 때문에 ) 

   ㅇ. 관계( Relational)                      새발(crow-feet)표기법
      -  선택성            40부서                                 사원X     0|<
      
      한명의 사원은 한 개의 부서에 소속되어야 하며,
      한 개의 부서는 0명 이상의 사원을 소속할  수 있다
      ㄷ   한자키 
      사원 ∋|0----------------<소속>-----------------|- 부서
      
      
      -  실체 ---- 실선 ----- 실체
      - 관계 차수
          ㄱ. 1:1 관계                            부서 1            부서장   1
          ㄴ. 1:다 관계 (  1:N )                부서  1            사원  N          
          ㄷ. 다:다 관계 ( N: M)              고객 N             상품 M               
               개념적 모델링( ER-D) 존재하지만 논리적모델링(정규화)  1:N  N:1 변환되어진다.
               
      - 정의 ? 업무의 연관성이다. 
                 실체를 정의하다보면 서로 연관되는 실체들이 있다. 
                 
      예)  고객(E)        <주문관계>            상품(E)
                             구매날짜/상품/결제
                             <주문관계> ???
      
            부서(E)        <소속관계>            사원(E)
            부서테이블     소속테이블                사원테이블
            
            홍   2023.1.1   30  신청
            홍   2023.1.1   30  신청 
            홍   2023.1.1   30  신청
            
            Emp
            Dept
            Salgrade
            Bonus
   
    [개념적 데이터 베이스 총 정리] 
    1 단계) 업무분석
    2 단계) 실체 도출 - 부서, 사원 
    3 단계) 속성 도출 - 
    4 단계) 식별자 도출 
    5 단계) 관계 설정 
    6 단계) 관계차수 , 선택성 설정

 

 

 

 

 

 

[문제1] 다음은 현업 담담자와의 면담 자료이다. 지금까지 알아본 개념을 바탕으로 다음에서 실체와 주요 속성을 추출해 다이어그램을 그리시오.

나는 교육센터의 관리자이다 .
우리는 여러 과정을 가르치는 데,
각 과정은 코드,이름 및 수강료를 갖고 있다. 
'VB'과 'Java' 는 인기 있는 과정이다. 
과정들은 1일~4일간으로 기간은 다양하다.
박찬호와 박신양은 우리의 가장 훌륭한 강사들이다. 
우리는 각 강사의 이름과 전화번호를 필요로 한다.
학생들은 시간에 따라 여러 개의 과정을 이수할 수 있는 데 
많은 학생들이 이렇게 하고 있다. 
우리는 각 학생들의 이름과 전화번호를 알고 싶다. 
   
   e_name   d_name
[실체(Entity)]
5. 강의실
    <관계>
2. 강사 - [강사코드], 이름, 전화번호, 주소, 가족관계 ... 
    <배정> 
1. 과정 -  [과정코드],기간, 이름,수강료 ...
    <관계>
1-1. 개설(개강)과정 - 과정,개강일,수료일 ...
    <수강관계> - 결재일,접수일, 출석, 성적, 수강상태
3. 학생 - [학생코드], 이름, 전화번호 ... 

5. 기간

6. 교육센타

7. 직원 -  타입
   
8. 직원타입
   관리자
   매니져
   전임강사
   시간강사
   
   
   

반응형

'Oracle' 카테고리의 다른 글

[days13] Sequence(시퀀스)  (0) 2020.11.16
[days12] View  (2) 2020.11.13
[days10] join 사용하기 + SELF JOIN  (0) 2020.11.11
[days09] 복합키 / JOIN  (0) 2020.11.10
[days09] 제약조건  (0) 2020.11.10
Comments