<기본 개념>
- 데이터베이스 설계 : 현실의 정보를 반영한 데이터베이스를 도출해냄. → 사용자의 요구사항을 만족해야 함.
ex. 어떤 필드로 구성? 어떤 물리적 형태로 저장?
- 단계
1. 요구사항 분석 : DB가 제공해야 하는 핵심 정보, 제한 조건을 도출 (사용자가 요구하는 사항 정리)
2. 개념적 설계 : 앞에 나온 결과를 DBMS에 추상화된 표현 방식으로 기술함. 이를 개념적 스키마라고 함.
3. 논리적 설계 : 앞에 나온 결과를 논리적 데이터베이스 구조에 맞게 생성함. 이를 논리적 스키마라고 함.
4. 물리적 설계 : 앞에 나온 결과를 실제 컴퓨터에 저장할 수 있도록 효율적이고 구현 가능하도록 설계함.
개념적 설계
2단계였던 개념적 설계에 대하여 더 알아보자.
개념적 설계는 사용자의 요구사항 분석 후에(1단계) 사람들이 이해하기 쉽게 추상적인 형태로 표현하는 것이다.
이때 추상적인 형태로 표현되는 것이 개념적 스키마이다. 개념적 스키마는 개체관계 다이어그램 또는 ER스키마라고 부른다.
개념적 스키마는 개념적 모델을 이용하여 만들어지는데, 개념적 모델 중 대표적인 것이 개체관계 모델이다.
논리적 설계
3단계 였던 논리적 설계에 대하여 더 알아보자.
논리적 설계는 개념적 스키마를 바탕으로 논리적 모델을 이용하여 논리적 스키마를 생성한다. 논리적 스키마는 테이블 스키마 또는 데이터베이스 스키마라고 부른다.
물리적 설계
4단계 였던 물리적 설계에 대하여 더 알아보자.
DBMS가 제공하는 구조에 따라 물리적으로 필드의 데이터 타입, 인덱스 등 테이블의 저장 구조인 물리적 스키마를 생성한다.
가장 간단한 물리적 설계는 테이블의 각 필드에 대한 데이터 타입만 결정 후, SQL의 create table 문을 이용하여 테이블을 생성하는 것이다.
그러나 자주 사용되는 질의의 실행 시간이 지나치게 길다면, 시간 성능을 고려하여 물리적 설계 단계에서 단축시켜야 하고,
인덱스, 외래키, 뷰 테이블 등등을 통하여, 저장된 공간의 효율성과 접근하기 위해 필요한 물리적인 거리인 공간 성능을 고려해야할 수도 있다.
설계시 고려사항
1. 충실성 : 필요한 데이터를 모두 표현했는가
2. 단순성 : 단순하고 이해하기 쉬운 구조로 표현했는가 (스키마들만 보고서도 요구 사항이 무엇이었는지 파악 가능)
3. 중복의 최소화 : 데이터의 중복을 최소화하여, 저장공간의 효율적 사용
4. 제약조건의 표현 : 데이터가 갖추어야 할 조건을 표현
<개체관계 모델>
- 개체 : 현실 세계에서 물리적, 추상적으로 존재하는 실체 (ex. 물리적 : 사람, 자동차, 집 / 추상적 : 수업, 성적, 과목)
- 개체집합 : 동일한 특성을 갖는 개체들의 모임
- 속성 : 개체의 특성 (=필드와 비슷한 성격)
* 필드 vs 속성
필드 : 관계형 관계 모델에서 정의, 원자 값(하나의 값)만 허용
속성 : 개체관계 모델에서 정의, 다중값 속성 및 복합속성 가능.
-> 복합 속성 : 하나의 개체에 여러 개의 속성 존재 (address - 도, 구, 시 / special_day - year, month, day)
-> 다중값 속성 : 하나의 개체에 여러 개의 값 존재 (family_member - 엄마, 아빠, 나, 오빠 / hobby - 요리, 산책)
개체 집합은 동일한 속성을 갖는 개체들의 집합
관계와 관계집합
- 관계 : 개체 간의 대응성 (개체 '김광식'이 개체 '컴퓨터공학과'에 소속(affiliated)되어 있을 때 : ('김광식', '컴퓨터공학과') )
- 관계집합 : 동일한 유형의 관계들의 집합 ( ('김광식', '컴퓨터공학과'), ('김정현', '캄퓨터공학과'), ('김현정', '산업공학과') )
이진 관계 : 관계집합이 두 개체집합의 관계일 때
삼진 관계 : 관계집합이 세 개체집합의 관계일 때
- 대응수 : 관계집합에서 각 개체들이 참여할 수 있는 대응의 개수 : 일대일, 일대다, 다대다
ex. 각 학생은 하나의 학과에만 소속 가능 : ('김광식', '컴퓨터공학과'), ('김광식', '전자공학과')는 공존 불가
대응수의 종류
대응수에 대하여 더 알아보자.
- 일대일 관계 : 하나의 교과목에 대하여 하나의 강좌만 개설 가능
- 일대다 관계 : 하나의 교과목에 대하여 여러 분반 개설 가능
- 다대다 관계 : 각 학생은 여러 강좌 수강 가능하고, 각 강좌는 여러 수강생을 갖고 있을 수 있음.
약성 개체집합과 강성 개체집합
- 약성 개체 집합 : 기본 키로 설정할 만한 속성이 없는 개체집합 → 약성 개체집합의 기본키는 강성개체집합의 기본키와 자신의 부분키로 구성됨.
- 강성 개체 집합 : 기본 키로 설정할 만한 속성이 있는 개체집합
- 전체참여 : 모든 약성 개체집합이 관계에 빠짐없이 참여하는 것
- 부분참여 : 일부 약성 개체집합만 관계에 참여하는
- 부분키(구별자) : 약성 개체집합의 속성 중 강성 개체집합의 특정 개체에 대해 유일한 값을 갖는 속성들의 집합
약성 개체집합은 강성 개체집합에 항상 종속됨.
약성개체집합은 강성 개체집합에 항상 종속됨. → 강성 개체집합이 존재해야 약성 개체집합의 존재가 결정됨.
그러므로 강성 개체집합과 약성 개체집합 간의 관계가 맺어질 때 항상 일대일 또는 다대일 관계가 만들어짐.
(일대일 관계일 경우, 약성 개체집합은 약성 개체집합이 아님)
ex1.
course 개체집합은 기본 키로 설정할 만한 속성 course_id가 존재하므로 강성 개체집합
class 개체집합은 기본 키로 설정할 만한 속성이 없으므로 약성 개체집합
-> course 개체집합이 없다면, class 개체집합도 없음.
ex2. 각 직원의 가족 데이터의 관계를 알고 싶을 때
직원의 개체집합이 없으면 가족 개체집합이 독립적으로 존재할 수 없으므로 직원 개체집합이 강성, 가족 개체집합이 약성 개체집합임.
ex3. 각 건물과 내부사무실 관계를 알고 싶을 때
건물 개체집합이 없으면, 내부사무실 개체집합이 독립적으로 존재할 수 없으므로 건물 개체집합이 강성, 내부사무실 개체집합이 약성 개체집합임.
ex4.
– course(교과목) 개체집합의 속성 : course_id, title, credit
– class(강좌) 개체집합의 속성 : year, semester, division, classroom, enrol
– 약성 개체집합인 class 개체집합의 부분키
특정 course에 대해서 유일한 값을 갖는 class의 속성 (year, semester, division)
→ 서로 다른 course들에 대해서는 중복된 값을 가질 수도 있음 (기본키 x)
ex.5 class(강좌) 개체집합의 기본 키
– (course_id, year, semester, division)
일반화 관계
일반적 개념 개체를 구체화된 개념의 개체들로 분류 또는 분할해야 함
- 상위 개체집합(수퍼클래스 개체집합) : 일반적 개념 개체
- 하위 개체집합(서브클래스 개체집합) : 구체적 개념 개체
- 일반화 관계 : 여러 개체집합의 공통적인 특징을 모아 상위 개체집합 생성 (하위에서 상위로)
- 세분화 관계 : 하나의 개체집합을 여러 개의 하위 개체집합으로 분류 (상위에서 하위로)