본문 바로가기
IT 톺아보기/이런저런 공부

SQLD 끄적임

by 파초우 2021. 9. 12.
반응형

:warning: 해당 내용은 제가 본걸 막 쓴 것이기 때문에 도움이 되지 않을수도 있습니다.!!!

  • 도메인의 특징
    1. 엔터티 내에서 속성에 대한 데이터 타입과 크기를 지정
    2. 엔터티 내에서 속성에 대한 NOT NULL을 지정
    3. 엔터티 내에서 속성에 대한 Check 조건을 지정
  • 주식별자를 도출하기 위한 기준
    1. 해당 업무에서 자주 이용되는 속성을 주식별자로 지정
    2. 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
    3. 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.
  • 주식별자의 특징
    1. 유일성: 주식별자에 의해 엔터티 내에서 모든 인스턴스들을 유일하게 구분함
    2. 최소성: 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함
    3. 불변성: 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함
    4. 존재성: 주식별자가 지정되면 데이터 값이 반드시 존재 해야 함(NOT NULL)
  • 컬럼에 대한 반정규화 기법
    1. 중복 칼럼을 추가: 조인감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 함
    2. 파생 칼럼을 추가: 조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 함
    3. 이력 테이블에 기능 칼럼을 추가: 최신 값을 처리하는 이력의 특성을 고려하여 기능성 칼럼을 추가
    4. PK에 의한 컬럼 추가: 복합 의미를 갖는 PK를 단일 속성으로 구성했을 때 발생되며, PK안에 데이터가 존재하지만 성능 향상을 위해 일반 속성으로 포함하는 방법
    5. 응용 시스템 오작동을 위한 컬럼 추가: 업무적으로는 의미가 없으나, 데이터 처리시 오류로 인해 원래 값으로 복구하길 원하는 경우 데이터를 임시적으로 중복 보관하는 방법
  • 반정규화
    • 개념: 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로, 의도적으로 정규화 원칙을 위배하는 행위
    • 반정규화 수행 시, 시스템의 성능이 향상되고 관리 효율성이 증가하지만 데이터의 일관성 및 정합성의 저하가 될 수 있음
    • 과도한 반정규화는 오히려 성능 저하를 가져옴
    • 반정규화를 위해서는 사전에 데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능을 단순화를 우선으로 할지 결정해야 함
    • 반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있음
    • 테이블 통합
      • 1 : 1 관계, 1 : M 관계, 슈퍼/서브 관계를 통합하여 성능을 향상 시키는 것
      • 여러 개 테이블에서 발생하는 프로세스가 동일하게 자주 처리되는 경우, 여려 개의 테이블을 이용하여 항상 조회를 수행하는 경우 테이블 통합을 고려
      • 고려사항: 데이터 검색은 간편하지만 레코드 증가로 인해 처리 량이 증가, 테이블 통합으로 인해 입려그 수정, 삭제 규칙이 복잡해질 수 있음, NOT NULL, Default, Check 등의 제약조건 설계가 어려움
      테이블 분할
      • 수평 분할
        • 레코드를 기준으로 테이블을 분할
        • 레코드별로 사용 빈도의 차이가 큰 경우 사용 빈도에 따라 테이블을 분할
      • 수직 분할
        • 하나의 테이블에 속성이 너무 많을 경우 속성을 기준으로 테이블을 분할
        • 갱신 위주의 속성 분할: 데이터 갱신 시 레코드 잠금으로 인해 다른 작업을 수행할 수 없으므로 갱신이 자주 일어나는 경우
        • 자주 조회되는 속성 분할: 자주 조회되는 속성이 극히 일부일 경우
        • 크기가 큰 속성 분할: 이미지나 2GB 이상 저장될 수 있는 텍스트 형식 등으로 된 속성일 경우
        • 보안을 적용해야 하는 속성 분할: 특정 속성에 대해 보안을 적용할 수 없으므로 보안을 적용해야 하는 경우
      • 중복 테이블 추가
        • 중복 테이블을 사용하는 경우
          1. 정규화로 수행 속도가 느려지는 경우
          2. 많은 범위의 데이터를 자주 처리해야 하는 경우
          3. 특정 범위의 데이터만 자주 처리해야 하는 경우
          4. 처리 범위를 줄이지 않고는 수행 속도를 개선할 수 없는 경우
        • 집계 테이블의 추가: 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거를 설정하는 것으로, 트리거 오버헤드를 유의해야 함
        • 집행 테이블의 추가: 이력 관리 등의 목적으로 추가하는 테이블, 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본 키를 적절히 설정
        • 특정 부분 만을 포함하는 테이블의 추가: 데이터가 많은 테이블의 특정 부분 만을 사용하는 경우 해당 부분 만으로 새로운 테이블을 생성
      • 중복 속성 추가
        • 중복 속성을 추가하면 데이터의 무셜성 확보가 어려움, 필요한 저장 공간이 증가함
        • 중복 속성을 추가하는 경우
          • 조인이 자주 발생하는 속성
          • 접근 경로가 복잡한 속성
          • 엑세스의 조건으로 자주 사용되는 속성
          • 기본 키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우
        • 고려 사항
          • 테이블 중복과 속성의 중복을 고려
          • 데이터 일관성 및 무결성에 유의
          • SQL 그룹 함수를 이용하여 처리할 수 있어야 함
          • 저장 공간의 지나친 낭비를 고려
  •  
반응형