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 할 때 마다 색인표를 갱신해야하므로 속도가 느리다.
물리모델
21) 테이블명 컬럼명 변경
- 테이블명과 컬럼명을 작성할 때 보통 다음의 규칠에 따라 작성한다.
- 단어는 알파벳 3자 또는 4자로 축약해서 표현한다.
- 단어와 단어 사이는 밑줄(_)로 표현한다.
22) 도메인 정의 및 적용
- 비슷한 종류의 컬럼들을 묶어 새 타입으로 정의한다.
23) 번호가 자동 증가하는 컬럼을 지정
- 테이블의 PK 중에서 자동으로 증가해야 하는 컬럼을 지정한다.
24) 기본값 및 제약 조건 설정
- 일부 컬럼에 대해 기본 값을 설정한다.
- 일부 컬럼의 값의 범위를 지정한다.
포워드 엔지니어링
외부키
- 자식 테이블에서 부모 테이블의 특정 데이터를 가리키는 컬럼
- 반드시 부모 테이블의 PK 컬럼 값을 저장해야 한다.
- 다른 일반 컬럼의 값은 사용할 수 없다.
식별 관계와 비식별 관계
- 비식별관계
- 자식 테이블의 외부키가 그 테이블에서 일반 컬럼으로 사용될 때
- 즉 관계를 표현하는 외부키가 그 테이블에서 식별자로 사용되지 않는 것을 말한다.
- FK != PK
- 식별 관계
- 자식 테이블의 외부키가 그 테이블에서 PK컬럼으로 사용될 때
- 즉 관계를 표현하는 외부키가 그 테이블에서 식별자로 사용되는 것을 말한다.
- FK == PK