2020-11-13 TIL

3 minute read

DB 모델링

  • DB 모델링
  • 모델링? 시스템을 분석하고 구조화시켜 글과 그림으로 표현한 것.
  • 렌더링? 명령어를 해석하여 화면에 출력하는 것.
  • DB 모델링? 데이터를 분석하고 구조화시켜 데이터 속성과 관계를 글과 그림으로 펴현한 것.
    • 목표? 데이터가 중복되지 않도록 테이블을 구조화하는 것
    • 중복 데이터를 제거 -> 데이터의 안정성, 신뢰성을 높인다. -> 무결성을 유지한다.
  • 주요 용어
    • table(relation, entity, file)
    • intension(schema, header)
    • extention(instance, data)
    • row(tupel, record)
    • column(attribute, field)
    • key
      • 수퍼 키
        • 데이터를 구분할 때 사용할 식별자.
        • 한 개 이상의 데이터로 구성된다.
      • 후보 키 = 최소 키
        • 최소한의 컬럼 값만으로 식별이 가능한 키.
        • 후보 키 중에 프라이머리 키를 선택한다.
      • 기본 키 / 주 키
        • 후보 키 중에서 데이터 식별자로 사용하기 위해 선정된 키
        • 나머지 후보 키는 대인키로 불린다.
      • 대리 키 / 인공 키
        • 주 키의 컬럼의 개수가 많거나 주 키로 사용할 적절한 컬럼이 없는 경우, 일련 번호와 같은 임의의 컬럼을 추가하여 PK로 만든다.
      • 외래 키
        • 다른 테이블의 PK 값을 저장하는 컬럼
        • FK가 있는 테이블을 자식 테이블이라 부르고,
        • FK가 가리키는 테이블을 부모 테이블이라 부른다.
  • 수퍼 키 > 후보 키 > 주 키 / 대안 키=유니크 컬럼

논리모델

  • 특정 DBMS를 고려하지 않고 수행하는 개념적인 모델링

01 엔티티(테이블) 식별 및 속성 식별

  • 특정 값들의 집합 시스템에서 다루는 데이터(테이블)를 식별한다.
    • 테이블을 구성하는 값을 속성(attribute), 컬럼(column)이라고 한다.
    • 예: 학생이 엔티티라면 이름, 전화, 이메일은 어트리뷰트(컬럼)이다.

02) 주 키 선정(Primary Key, PK)

  • 데이터를 구분할 때 사용할 식별자를 지정한다.
  • 만약 PK로 지정할 적절한 컬럼이 없거나, 있더라도 여러 개의 컬럼을 묶어서 사용해야 하는 경우에는 대리 키(인공 키)를 사용하는 것이 좋다.

03) 포함관계 및 배타적 관계 추가

  • 여러 테이블에 공통으로 포함되는 컬럼이 있는 경우, 별도의 테이블로 정의한다.
  • 기본 데이터를 저장하고 있는 테이블 쪽을 부모 테이블로 한다.
  • 포함관계 : 여러 테이블에서 동시에 포함할 수 있는 관계이다.
  • 배타적 관계 : 여러 테이블 중에서 오직 한 개의 테이블만 포함할 수 있는 관계다.

04) 제1정규화

  • 정규화란 데이터 중복을 찾아내어 별도의 테이블로 데이터를 분리시키는 것이다.
  • 중복 ㅌ데이터 또는 중복 컬럼을 별도의 테이블로 분리하여 부모-자식 관계를 맺는다.
    • 중복 컬럼? 사진1, 사진2, 사진3…
    • 중복 데이터? 수강생 데이터, 강의 데이터, 강사 데이터…
  • 데이터를 참조하는 테이블이 자식 테이블이고 데이터를 갖고 있는 테이블이 부모 테이블이다.
  • 자식 테이블에서는 부모 테이블의 데이터를 가리키기 위해 그 데이터의 pk값을 보관해야 한다.
  • 부모 테이블의 데이터의 PK값을 저장하는 컬럼을 외부(FK)라 부른다.

05) 제2정규화

  • PK가 여러 컬럼으로 이루어진 경우에 수행한다.
  • 모든 일반 컬럼은 반드시 PK 컬럼에 종속되어야 한다.
    • 그렇지 않은 일반 컬럼이 있다면 변ㄹ도의 테이블로 분리하여 부모-자식 관계를 맺는다.

06) 제3정규화

  • 어떤 컬럼이 PK가 아닌 다른 일반 컬럼에 종속되는 경우가 있다면 별도의 테이블로 분리하여 부모-자식 관계를 맺는다.

07) 다대다 관계 해소

  • 테이블과 테이블 사이에 다대다 관계를 형성한다면, 일대다의 관계로 변경해야 한다.
  • 왜? DBMS는 물리적으로 다대다 관계의 데이터를 저장할 수 없다.
    • 해결책?
      • 두 테이블의 관계를 저장할 테이블을 만든다.
      • 관계 테이블이라 부른다.
      • 관계 테이블은 각 테이블과 일대다의 관계를 맺는다.

08) 관계 차수 지정

  • 데이터끼리 상호 관계의 개수를 지정한다.
    • 1 : * (0이상) => FK 컬럼이 not null 이다.
    • 1 : 1..* (1이상) => FK 컬럼이 not null 이다.
    • 0..1 : * (0이상) => FK 컬럼이 null 허용이다.
    • 0..1 : 1..* (1이상) => FK 컬럼이 null 허용이다.
  • null 이냐 not null 이냐의 기준이 된다.
  • 0은 null 이어도 된다.
  • 0은 지금 당장 입력을 받지 않아도 된다.

09) 유니크 컬럼 지정

  • PK는 아니지만 PK처럼 중복되어서는 안되는 컬럼이다.
  • 대체 키 컬럼이 유니크 컬럼이 된다.
  • 즉, PK로 선정되지 않은 나머지 후보 키는 유니크 컬럼으로 지정되어 데이터가 중복되지 않도록 한다.

10) null 허용 여부 지정

  • 필수 입력 컬럼인지 선택 입력 컬럼인지 지정한다.

11) 인덱스 컬럼 지정

  • 데이터를 찾을 때 검색 조건으로 사용할 컬럼을 지정한다.
  • 조회 컬럼으로 지정하면 그 컬럼의 값으로 색인표가 자동으로 생성되어 데이터를 찾는 속도가 빨라진다.
  • 장점 : select 속도가 빠르다
  • 단점 : insert, update, delete 할 때 마다 색인표를 갱신해야하므로 속도가 느리다.

물리모델

  • 특정 DBMS에 맞춘 물리적인 모델링

21) 테이블명 컬럼명 변경

  • 테이블명과 컬럼명을 작성할 때 보통 다음의 규칠에 따라 작성한다.
    • ex) first name(FST_NM)
  • 단어는 알파벳 3자 또는 4자로 축약해서 표현한다.
  • 단어와 단어 사이는 밑줄(_)로 표현한다.

22) 도메인 정의 및 적용

  • 비슷한 종류의 컬럼들을 묶어 새 타입으로 정의한다.

23) 번호가 자동 증가하는 컬럼을 지정

  • 테이블의 PK 중에서 자동으로 증가해야 하는 컬럼을 지정한다.

24) 기본값 및 제약 조건 설정

  • 일부 컬럼에 대해 기본 값을 설정한다.
  • 일부 컬럼의 값의 범위를 지정한다.

포워드 엔지니어링

  • 모델 —> 코드

외부키

  • 자식 테이블에서 부모 테이블의 특정 데이터를 가리키는 컬럼
  • 반드시 부모 테이블의 PK 컬럼 값을 저장해야 한다.
  • 다른 일반 컬럼의 값은 사용할 수 없다.

식별 관계와 비식별 관계

  • 비식별관계
    • 자식 테이블의 외부키가 그 테이블에서 일반 컬럼으로 사용될 때
      • 즉 관계를 표현하는 외부키가 그 테이블에서 식별자로 사용되지 않는 것을 말한다.
      • FK != PK
  • 식별 관계
    • 자식 테이블의 외부키가 그 테이블에서 PK컬럼으로 사용될 때
      • 즉 관계를 표현하는 외부키가 그 테이블에서 식별자로 사용되는 것을 말한다.
      • FK == PK

Categories:

Updated: