1. DB 제작 과정
- 가장 일반적인 프로젝트 수행절차 (폭포수 모델)
1. 기획
어떤 프로그램을 누가 어떻게 작성할지 계획을 세우며 요구, 기능, 예산, 개발 기간을 결정한다.
2. 분석
DB응용 프로그램은 원래 사람이 하던 일을 전산화하는 것이다. 따라서 현실 세계의 수작업을 면밀히 분석하는 업무 파악부터 한다.
3. 설계
설계 단계에서는 분석 문서를 참조하여 구현 방법을 결정한다. 비즈니스 로직에 따라 실세계의 사물을 테이블로 정의하고 관계를 설정하는 작업을 모델링 이라고 한다.
4. 구현
모델링한 데이터를 테이블로 구체화하고 효율적인 운영을 위한 인덱스, 프로시저 등을 정의한다.
5. 유지, 보수
구현 완료한 프로그램을 실제 업무에 사용한다. 미처 예상하지 못한 문제나 버그가 발견되고 기능 개선 요구도 발생한다.
2. 엔터티
- 모델링의 첫 단계는 데이터베이스에 저장할 대상인 엔터티를 정의하고 추출하는 것 이다. 엔터티 추출 대상이 명확히 보이지 않는 경우가 있는데 업무의 흐름을 분석하여 명사를 먼저 엔터티로 정의하고 명사에 가해지는 동작도 엔터티로 정의하면 된다.
💡 고객은 상품을 주문하고 쇼핑몰은 주문받은 상품을 배송한다.
위의 쇼핑몰의 업무 분석 결과에서 고객, 상품과 같은 사물과 주문, 배송 동작을 엔터티로 추출한다.
엔터티를 잘 관찰하여 어떤 속성이 있는지 조사한다.
상품 : 이름, 가격, 재고, 할인율
고객 : 아이디, 주소, 전화번호, 예치금, 마일리지
3. 관계
- 엔터티는 독립적으로 존재하지 않고 업무적으로 서로 연관된다. 고객은 상품을 주문하여 쇼핑몰은 주문받은 상품을 배송하는 식이다. 이때 주문한다, 배송한다가 바로 관계이며 엔터티간의 연관성을 결정한다.
- 관계는 양쪽 엔터티의 인스턴스 개수에 따라 1:1관계, 1:다 관계, 다:다 관계로 분류하며 반드시 연결해야 하는 필수 관계와 필요할때만 연결하는 선택 관계가 있다.
1 : 1 관계 : 양쪽 테이블의 인스턴스를 하나씩 연결한다. 예를 들어 학생의 신상정보가 50개쯤 된다고 하면 이를 자주 참조하는 정보와 잡스러운 정보로 분할하여 학번정보로 연결고리를 만들어준다.
1 : 다 관계 : 가장 흔하게 존재하는 관계는 1 : 다 관계이며 부서와 직원의 관계가 대표적이다.
다 : 다 관계 : 양쪽 엔터티가 서로 복수개로 연결, 학생과 과목간의 수강 관계가 대표적이다. 학생 한명이 여러 과목을 수강할 수 있으며 또한 한 과목을 여러 학생이 수강할 수 있다. (다 : 다 관계는 두개의 다 : 1, 1 : 다 관계로 변환한다.)
4.정규화
제 1 정규화
- 정규화는 테이블을 재구성하여 논리적 구조를 개선하는 절차이다. 불필요하게 중복되는 데이터를 제거하여 저장 공간을 절약하고 전체적인 성능을 향상시킨다.
- 제 1 정규화는 필드의 데이터를 원자화 한다. 필드에는 단일값을 저장하고 필드끼리는 독립적이어야 한다. 만약 프로젝트라는 필드가 있고 사람마다 담당할 수 있는 프로젝트 수의 제한이 없다면?
- 불필요하게 한 사람에게 할당된 프로젝트의 수가 늘어날 때마다 사람 테이블의 레코드가 증가하며 중복 테이터가 늘어날 수 있다.
- 이때 프로젝트 필드를 없애고 프로젝트 테이블을 만들어 둘의 참조관계를 만들어준다. 양쪽 테이블에는 pk가 있으며 pk이외의 외부 테이블에 대한 참조를 가지는 키를 외래키 라고 부른다.(두 테이블간의 연결고리 역할)
프로젝트 테이블
관계를 맺는 테이블은 누가 업무의 중심인가에 따라 부모, 자식 관계가 된다. 업무의 주체가 되는 쪽을 부모 또는 마스터, 반대쪽을 자식 또는 디테일 이라고 한다.
제 2 정규화
- 제 2 정규화는 일반 필드를 모두 기본키에 종속시키는 것이다. 종속된다는 것은 기본키를 알면 나머지 정보도 알 수 있다는 뜻이다.
- 즉 기본키가 달라지면 레코드 내용도 달라져야 한다. 만약 필드중에 기본키가 아닌 다른 필드에 종속적인 필드가 있다면 둘을 분리하여 새로운 테이블을 만들고 둘의 관계를 설정한다.
제 3 정규화
- 제 3 정규화는 기본키가 아닌 일반 필드끼리 서로 종속되지 않도록 하는 것이다. 일반 필드끼리는 서로 독립적이여야 한다.
다음 테이블에서는 방번호와 회원수가 동호회 기본키가 아닌 필드에 종속적이다.
- 이럴 경우 직원 테이블과 동호회 테이블을 따로 분리하여 중복을 제거한다.
역정규화
- 정규화 과정을 거치면 중복이 제거되고 구조가 치밀해진다. 그러나 양쪽 정보를 읽을 때는 여러 테이블을 읽어야하므로 속도는 느려진다.
- 만약 정규화를 너무 과하게 하여 이중 삼중의 조인이 필요하다면 무시할 수 없는 성능의 저하가 생기고 이럴 때에는 의도적으로 데이터를 중복시켜 속도 향상을 꾀한다.
참고