데이터베이스 설계 및 구축 2
데이터베이스 설계 및 구축(5-7장)
업무 분석
‘논덩이 효과’ 라는 용어가 있다. 초기 단계에서의 실수일수록 파급효과가 크다는 말이다.
대상이 되는 업무를 알지 못하면 프로그램을 개발하는 것은 어려운 일이다.
- 시스템 개발을 의뢰한 회사에 대한 일반 사항을 이해해야 한다.
- 전체 업무를 분석하기에 적당한 크기로 나눈다.
- 각 서브젝트 에어리에어에 대해 업무에 관련된 문서들을 수집한다.
- 업무 담당자들을 만나 인터뷰를 한다.
- 모아진 문서와 인터뷰 자료를 분류하고 체계적으로 정리한다.
문서 및 자료 수집
현실 세계의 업무 처리 과정이나 결과는 문서나 데이터로 남는다. 이를 잘 수집해서 분류해야 한다. 특히 업무 메뉴얼이나, 다른 업무 주체와의 업무 과정에서 주고 받는 문서들을 유심히 살펴야 한다.
담당자 인터뷰
개발을 통해 업무 절차를 혁신하고, 생산성을 높이기 위해서는 현업 담당자를 인터뷰해야 한다.
- 인터뷰의 목표를 수립해야 한다.
- 인터뷰 대상 업무에 대해서도 최대한 숙지해야 한다.
질문의 종류에는 3가지가 있다.
- 열린 질문 : 고정되어 있는 답을 요구하는 것이 아니라 인터뷰 대상자의 생각을 자유롭게 표현할 수 있도록 질문하는 것
- 닫힌 질문 : 인터뷰에 응하는 사람에게 지정되어 있는 답 중에서 고르도록 제약을 가하는 질문
- 추가 질문 : 답변 중 명확히 알고 싶은 부분이 있을 때 사용하는 질문
엔티티
현실 업무에 대한 자료 수집 및 정리 작업 이후에는 모델링 단계로 넘어간다. 데이터 모델링에서는 ERD 라는 수단을 통하여 모델링을 진행한다.
엔티티란
엔티티는 업무의 관심 대상이 되는 정보를 갖고 있거나, 그에 대한 정보를 관리할 필요가 있는 유형, 무형의 사물(개체)을 의미한다. 현실 세계를 데이터의 관점에서 관찰한 결과물인 것이다.
엔티티 도출 과정
- 엔티티 후보 풀과 엔티티 리스트를 그린다.
- 분석 대상 문서를 보고 명사를 찾아 표시한다.
- 명사 하나하나에 대해 속성인지 엔티티인지 구분한다.
- 중복된 명사나 유사한 의미의 명사는 하나로 정리한다.
- 엔티티 후보 풀에 있는 명사들을 검토한다.
- 도출된 엔티티에 대하여 구축될 시스템에서 데이트를 관리할 필요가 있는지 판단한다.
- 엔티티 기술서를 작성한다.
주식별자
주식별자는 엔티티에 소속된 인스턴스들을 구별하는 기준 역할을 하는 속성을 말한다. 각 튜플의 유일성을 구별해줄 수 있는 컬럼을 말한다.
해당 식별자에 대해서는 중복이 없어야 하는데, 이는 현재 시점뿐 아니라 미래에도 중복된 값이 없어야 한다는 뜻이다.
복합 속성으로 이루어진 주식별자
일반적으로 엔티티 이름에 ‘일별’, ‘기간별’ 과 같은 내용이 포함되면 날짜를 포함한 복합 속성을 주식별자로 갖는 경우가 많다.
인위적 주식별자
마땅한 주식별자가 없는 경우에는 인위적 주식별자를 사용할 수 있다. 그러나 주식별자 자체의 의미가 없기 때문에, 의미상 같은 튜플이 중복되어 생성될 수 있다. 인위적 주식별자를 사용하는 경우에는 데이터의 중복을 관리할 수 있는 대안을 마련해야 한다.
불필요한 속성이 주식별자에 포함되는 경우
의미적 중복이 발생할 가능성이 있다.
관계/외래식별자의 정의
관계를 찾아내기 위해서는 다음과 같은 방법을 사용할 수 있다.
- 문서로부터 동사를 구분한다.
- 관계 매트릭스를 그려본다.
- 부모, 자식 관계에 있는 엔티티들을 찾아본다.
- 관계가 정의되면 카디낼러티와 관계의 참여도를 표시한다.
외래식별자의 정의
- 관계가 있는 두 엔티티를 부모, 자식으로 구분한다.
- 부모 엔티티의 주식별자에 해당하는 속성이 자식 엔티티에도 존재하는지 확인한다.
관계/외래식별자에 대한 규칙
- 두 엔티티가 관련이 있다는 의미는 두 엔티티가 공유하는 속성이 있다는 뜻이다.
- 공통 속성의 값이 먼저 생성되는 쪽이 부모 엔티티가 되고, 가져다 쓰는 쪽이 자식 엔티티가 된다.
- 부모 엔티티에 있는 공통 속성은 주식별자가 되고, 자식 엔티티의 공통 속성은 외래식별자가 된다.
업무 규칙
부모 테이블의 튜플이 삭제되거나 수정되었을 때의 처리 규칙과, 자식 테이블에 새로운 튜플이 추가되거나 수정될 떄의 처리 규칙으로 분류할 수 있다.
부모 테이블의 튜플에 대한 삭제 규칙은 다음과 같다.
- restrict : 부모 테이블에 있는 값을 자식 테이블에서 참조하고 있다면 부모 테이블에 있는 값은 삭제할 수 없다.
- cascade : 부모 테이블에 있는 값을 삭제하면 그것을 참조하는 자식 테이블의 값도 삭제한다.
- set null : 부모 테이블의 값을 삭제하면 그것을 참조하는 자식 테이블의 값은 null 로 바뀐다.
- set default : 부모 테이블의 값을 삭제하면, 자식 테이블의 값은 default 로 바뀐다.
- none : 아무 제약이 없다.
수정 규칙도 동일하다.
자식테이블의 튜플에 대한 삽입 / 수정 규칙은 다음과 같다.
- restrict(삽입): 자식 테이블에서 튜플을 삽입할 때 부모 테이블에 없는 값을 사용하면 튜플 삽입이 안되게 한다.
- none(삽입) : 자식 테이블에서 튜플을 삽입할 때 어떤 값을 사용해도 튜플이 삽입된다.
- restrict(수정): 자식 테이블에서 튜플을 수정할 때 부모 테이블에 없는 값을 사용하면 튜플의 수정이 안되게 한다.
- none(수정) : 자식 테이블에서 튜플을 변경할 때 어떤 값을 사용해도 튜플이 변경된다.
속성
엔티티 내에서 관리해야 햘 정보의 항목들이 속성이다. 같은 데이터를 관리하는 속성은 ERD 전체에서 한 번만 나타나야 한다. 회원의 이름은 회원 엔티티에만 있으면 된다.
속성의 종류
- 기본 속성 : 업무의 분석 과정에서 도출되는 속성들로서 현실세계에 존재하는 정보를 반영한다. 이름, 나이 수량 등
- 설계 속성 : 정보를 효과적으로 관리하기 위해 설계 차원에서 새로 만든 속성. 국가코드, 색상코드 등
- 유도 속성 : 다른 속성으로부터 유도될 수 있는 속성. 구매금액 = 속성 * 단가 인 경우.
유도 속성을 사용할 때, 데이터 불일치를 방지할 수 있어야 한다.