정규화란…

** 정규화의 목적, 효과, 문제점
 
   정규화(Normalization)란 불필요한 데이터의 중복을 제거하여 데이터모형을 단순화하는
  작업으로 다양한 검사를 통하여 데이터모델을 보다 구조화하고 개선시켜 나가고자 하는
  일련의 과정을 말합니다.
 
 
   정규화의 목적은 자료 저장 공간의 최소화하고, DB내 데이터의 불일치 위험을
  최소화하는데 있습니다. 또한 자료의 수정, 삭제에 따른 예기치 않은 오류의
  최소화하여 데이터구조의 안정성 최대화하는 것이 그 목적입니다.
 
 
   – 데이터의 중복을 제거하고 데이터의 일관성을 유지할 수 있습니다.
   – 데이터 모형의 단순화가 가능합니다.
   – 속성의 배열 검증이 가능합니다. 즉, 식별자와 속성과의 종속성 여부를 판단할 수 있습니다.
   – 데이터베이스 설계가 용이하며, 엔티티(Entity)와 관계(Relationship)의 누락을 방지할 수
     있습니다.
 
 
   – 정규화로 인한 테이블의 개수 증가로 인하여 Join이 많이 발생하여 응답속도의 지연이 있을
    수 있습니다
   – 특정시점의 정보를 표현하기 위해 이력관리 엔티티의 발생 및 업무규칙 수용 난이도가 증가
    할 수 있습니다
   – 데이터 공간의 비효율적인 활용이 발생할 수 있습니다. (제 3정규화 이상의 정규화를 수행
     하는 경우)따라서 대부분 현업에서는 제 3정규화까지만을 수행하고 필요에 따라 비정규화
     (Denormalization) 과정을 수행합니다.
 
** 제 1정규화, 제 2정규화, 제 3정규화
 
 
    제 1 정규화란 반복 또는 복수값을 갖는 속성을 제거하여 모든 속성은 반드시 하나의 값만을
   갖도록 하는 것입니다.
 
   ## 정규화 전
                
      예비주문서 => @주문번호 + 주문일자 + 부서번호 + 관리자명 + 부서명칭 + 
                      전화번호 + 배달일자 + (상품번호 + 상품내역 + 단가 +
                      재고수량  + 주문수량 + 금액)
 
      이 경우 상품번호 개수만큼 주문내역이 반복값을 갖습니다. 이처럼 어떤 속성이
     다수의 반복적인 값을 갖는다면 1:M 관계의 새로운 엔티티를 추가하여야 합니다.
 
   ## 정규화 후
 
      주문 => @주문번호 + 주문일자 + 부서번호 + 관리자명 + 부서명칭 + 전화번호 +
               배달일자
 
     주문상세 => @주문번호 + @상품번호 + 상품내역 + 단가 + 재고수량 +
                    주문수량 + 금액
 
      앞의 주문서라는 엔티티가 주문과 주문상세라는 엔티티로 분리되어 1:M 관계를 가진
     모습을 확인할 수 있습니다.
     
 
    제 2정규화란 기본키에 종속되지 않는 속성을 제거하는 것입니다. 즉 모든 속성은
   반드시 엔티티 식별자에 전부 종속되어야 한다는 뜻입니다.
 
   ## 정규화 전
       
        주문 => @주문번호 + 주문일자 + 부서번호 + 관리자명 + 부서명칭 + 전화번호 +
                   배달일자
 
      주문상세 => @주문번호 + @상품번호 + 상품내역 + 단가 + 재고수량 + 
                     주문수량 + 금액
 
        위의 엔티티 내의 속성들 중 주문수량은 주문번호와 상품번호의 복합 식별자에
       종속적이지만 상품내역은 상품번호에만 종속적인 것을 볼 수 있습니다. 이와 같이
       어떤 속성이 식별자의 일부 속성에만 종속적이라면 속성의 위치가 잘못된 것을
       의미하며 새로운 엔티티를 추가하여야 합니다
 
   ## 정규화 후
 
        주문 => @주문번호 + 주문일자 + 부서번호 + 관리자명 + 부서명칭 + 전화번호 +
                   배달일자
 
        주문상세 => @주문번호 + @상품번호 + 주문수량 + 금액
 
        상품 => @상품번호 + 상품내역 + 단가 + 재고수량
 
        상품번호에 종속된 속성만을 모아 하나의 엔티티로 하고 주문번호와 상품번호
       모두에 종속되는 속성만을 모아 또 하나의 엔티티로 분리된 모습을 볼 수
       있습니다.       
 
 
    제 3정규화란 기본키가 아닌 속성에 종속적인 속성을 제거하는 것입니다.
    즉, 식별자가 아닌 모든 속성들간에는 서로 종속될 수 없습니다.
 
    ## 정규화 전
 
        주문 => @주문번호 + 주문일자 + 부서번호 + 관리자명 + 부서명칭 + 전화번호 +
                   배달일자
 
        주문상세 => @주문번호 + @상품번호 + 주문수량 + 금액
 
        상품 => @상품번호 + 상품내역 + 단가 + 재고수량
 
          위에서 부서명칭이라는 속성은 식별자인 주문번호에 종속되지 않고
         일반 속성인 부서번호에 종속적인 것을 볼 수 있습니다. 이처럼 속성간에
         종속성이 있는 경우에는 별도의 엔티티를 추가하여야 합니다.
 
    ## 정규화 후
 
        주문 => @주문번호 + 주문일자 + 부서번호 + 배달일자
 
        부서 => @부서번호 + 관리자명 + 부서명칭 + 전화번호
 
        주문상세 => @주문번호 + @상품번호 + 주문수량 + 금액
 
        상품 => @상품번호 + 상품내역 + 단가 + 재고수
 
          속성간의 종속성을 가진 속성을 별도에 엔티티로 분리함으로써 모든 엔티티의
         속성들이 항상 식별자에 대해서만 종속적이게 되었습니다.
 

정규화 이거 다시 보자…

멍청한 코딩

Map packeddata = (Map)request.getAttribute(“packeddata”);
List years = new ArrayList();
while(packeddata.keySet().iterator().hasNext()){
Integer year = (Integer)packeddata.keySet().iterator().next();
years.add(year);
}

이걸….

이걸루
바꾸다

Map packeddata = (Map)request.getAttribute(“packeddata”);
List years = new ArrayList();
Iterator iterator = packeddata.keySet().iterator();
while(iterator.hasNext()){
Integer year = (Integer)iterator.next();
years.add(year);
}

while 문 돌때마다 생성되는 객체가 무수히 많아져서 OutOfMemory 에러가 나더군요..
음…
그래서 아래와 같이 변환…짠.~~~
역시 멍청하게 코딩하면 안되는거군요..