2020.12.11 일지 - PL-SQL

0후·2020년 12월 11일
0

비트캠프

목록 보기
40/112

오늘의 요약

[ PART 5 - PL-SQL ] 
1. Procedure : "작업처리순서"
   (1) 설명 
       일련의 "작업처리순서"를 정의해 놓은 것으로 미리 DBMS에 컴파일되어져있어, 
       '프로그램 or 사용자로부터 호출'되면 실행되는 알고리즘 

   (2) 예 
       pro.sql 
       
2. Trigger : "DML방아쇠"
   (1) 설명 
       일련의 "작업처리순서"를 정의해 놓은 것으로 미리 DBMS에 컴파일되어져있어, 
       어떤 조건이 만족되어지는 상황('DML수행')이 발생되면, '자동'호출되는 알고리즘

   (2) 예 
       tri.sql

[ PART 6 - Modeling ]
1. DB 모델링이란 ? 
   현실세계의 업무프로세스를 분석해서 '실체(entity)'를 도출하고,
   소프트웨어로 구현해내기 위한 '데이터' 구조의 뼈대를 작성하는 업무 

2. 관계( relation ) 
  (1) 관계에 대한 이해 
     1)- 고객 table 
       이름  아이디  핸드폰  주소  차넘버  차종   차명  년식 
       ---------------------------------------------------------
       홍길동  aa     1234   서울   a1234  승용차 소나타 1995
       임꺽정  bb     2345   부산   NULL   NULL    NULL  NULL
       이승엽  cc     3456   대전   NULL   NULL    NULL  NULL
       한예슬  dd     4567   대구   d1234  승합차 갤로퍼 2001 
       장동건  ee     5678   대구   NULL   NULL    NULL  NULL
       한예슬  ff     6789   광주   f1234  미니벤 카렌스 1998
       
     2)- 고객 table 보기 변경 
       이름  아이디  핸드폰  주소  차넘버  차종   차명  년식 
       ---------------------------------------------------------
       임꺽정  bb     2345   부산   NULL   NULL    NULL  NULL
       이승엽  cc     3456   대전   NULL   NULL    NULL  NULL
       장동건  ee     5678   대구   NULL   NULL    NULL  NULL
       한예슬  dd     4567   대구   d1234  승합차 갤로퍼 2001
       홍길동  aa     1234   서울   a1234  승용차 소나타 1995
       한예슬  ff     6789   광주   f1234  미니벤 카렌스 1998

     3) 분리 
       <1> 레코드(ROW)를 기준
         1> 테이블1(자동차를 소유하지 않은 고객)
          이름  아이디  핸드폰  주소  
          ----------------------------
          임꺽정  bb     2345   부산   
          이승엽  cc     3456   대전   
          장동건  ee     5678   대구   

         2> 테이블2(자동차를 소유한 고객)
          이름  아이디  핸드폰  주소   차넘버  차종   차명  년식 
          -------------------------------------------------------
          한예슬  dd   4567   대구   d1234  승합차 갤로퍼 2001
          홍길동  aa   1234   서울   a1234  승용차 소나타 1995
          한예슬  ff   6789   광주   f1234  미니벤 카렌스 1998

       <2> 컬럼(COLUMN)을 기준 
         1> 테이블1(개인신상)
          이름  아이디    핸드폰   주소 
          ----------------------------
          임꺽정  bb     2345   부산 
          이승엽  cc     3456   대전  
          장동건  ee     5678   대구  
          한예슬  dd     4567   대구   
          홍길동  aa     1234   서울   
          한예슬  ff     6789   광주
	 
	 2> 테이블2(자동차)
	  차넘버  차종   차명  년식      
          --------------------------
          d1234  승합차 갤로퍼 2001
          a1234  승용차 소나타 1995
          f1234  미니벤 카렌스 1998 

    4) 관계 (능동적으로 표현)
       <1> 부모 / 자식 테이블의 결정 
         1> 부서(dept)는 사원(emp)을 소유한다. (능동형)
          -> 부모('부서' 테이블), 자식('사원' 테이블)
	  -> '사원'이 정의되기위해서는, '부서'가 먼저 정의되어야 한다.

	 2> 개인은 자동차를 소유한다. (능동형)
	   -> 부모('개인신상' 테이블) , 자식('자동차' 테이블)
	   -> '자동차'가 정의되기위해서는, '개인신상'이 먼저 정의되어야 한다.

       <2> 공통컬럼의 요구 ( 2개의 테이블의 관계 형성 )
         1> '개인신상' 테이블의 아이디(PK)
	 2> '자동차' 테이블의 아이디(FK)

       <3> 공통 컬럼이 삽입된 테이블의 정의 1 - (옳음) 
         1> 테이블1(개인신상) - 부모 
	    이름  아이디(PK) 핸드폰 주소 
           ----------------------------
           임꺽정  bb        2345   부산 
           이승엽  cc        3456   대전  
           장동건  ee        5678   대구 
	   한예슬  dd        4567   대구   
           홍길동  aa        1234   서울   
           한예슬  ff        6789   광주

	 2> 테이블2(자동차) - 자식 
	   차넘버(PK)  차종   차명  년식  아이디(FK)
           -----------------------------------------
           d1234     승합차  갤로퍼 2001   dd
           a1234     승용차  소나타 1995   aa
           f1234     미니벤  카렌스 1998   ff

	  Q1> 이름이 '홍길동'인 자동차의 차넘버를 SELECT 하라
          SUB> select ID from MEMBER where NAME='홍길동';
	  SQL> select m.NAME, c.NUM from MEMBER m, CAR c
	      where c.ID=(select ID from MEMBER where NAME='홍길동');

       <4> 공통 컬럼이 삽입된 테이블의 정의 2 - (잘못됨)	 
	 1> 테이블2(자동차) - 부모  
	   차넘버(PK) 차종   차명  년식
           ------------------------------
           d1234     승합차 갤로퍼 2001 
           a1234     승용차 소나타 1995 
           f1234     미니벤 카렌스 1998 

         2> 테이블1(개인신상) - 자식  
	   이름  아이디(PK)   핸드폰   주소  차넘버(FK)
           -----------------------------------------
           임꺽정  bb        2345   부산   NULL 
           이승엽  cc        3456   대전   NULL
           장동건  ee        5678   대구   NULL 
	   한예슬  dd        4567   대구   d1234
           홍길동  aa        1234   서울   a1234 
           한예슬  ff        6789   광주   f1234

  (2) 관계의 종류 
     1) Cardinality 관점
        <1> 일대일( 1 : 1 ) : 모델링 가능 
	   ex) 부서 / 부서장 
	<2> 일대다( 1 : N ) : 모델링 가능 
	   ex) 부서 / 사원 
	<3> 다대다( N : N ) : 모델링 불가능 
	   ex) 고객 / 상품 

	 # 다대다 관계의 '해소' #
	   -> N:N는 1:N으로 변경(중간테이블)해서 모델링해야 함
	  ex1) 고객 / 상품
	  1> 테이블1(고객) - 부모 
	      이름    아이디(PK)   핸드폰 
	      -----------------------------
	      홍길동  hong      011-123-1234
	      이순신  lee       019-456-4567

	  2> 테이블2(상품) - 부모 
	      상품ID(PK) 이름    회사번호  가격 
	      ----------------------
	      P0001    새우깡  농심      1200
	      P0002    맛동산  해태       700

	  3> 테이블3(구매) - 자식 
	     구매번호(PK) 고객아이디(FK) 상품이름(FK)  구매일자 
	     ---------------------------------------------------
	     001         hong         P0001   2008/04
	     002         hong         P0002   2007/10
	     003         lee          P0001   2006/12

	  ex2) 공장 / 제품
	  ex3) 학생 / 동아리
	  ex4) 학생 / 과목 

     2) Relationship Type 관점
       <1> 식별관계 ( Identifying )
          1> 정의: 부모의 PK컬럼이 자식의 'PK컬럼'으로 전이 되는 것
	  2> 무조건 No nulls 
      
     ex) alter table EMP2 drop constraint PK_EMP2;
	 alter table EMP2 add constraint PK_EMP22 primary key(EMPNO, DEPTNO);

       <2> 비식별관계 ( Non-Identifying )
          1> 정의: 부모의 PK컬럼이 자식의 '일반컬럼'이 전이 되는 것
	  2> 2개중 택일 
	     - Null Allowed 
	     - No nulls
         
      ex) insert into EMP2(EMPNO, DEPTNO) values(8000, 30); -- 둘은 다른 관계
          insert into EMP2(EMPNO, DEPTNO) values(8000, 40); 

cf) 모델링툴 다운로드 URL 
http://ko.exerd.com/#download-section

알게된 개념

  • ㄴ자 테이블은 설계가 잘못됐다는 증거다. ㄴ자테이블로 나오거나, 데이터의 중복이 발생해버린다고 하면 테이블의 분리를 생각해야 한다.
  • 중복도가 낮으면 카디널리티가 높다고 표현한다. 중복도가 높으면 카디널리티가 낮다고 표현한다. 즉, 카디널리티는 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표이다.
profile
휘발방지

0개의 댓글