728x90
SMALL

반정규화(De-Normalization)란? 

- 정규화된 엔터티, 속성, 관계에대해 시스템 성능 향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법

- 조회시 디스크 I/O거 많거나 경로가 멀어 조인에 의한 성능 저하를 막기 위해 수행 

* 디스크 I/O  : 데이터를 작성 하고 변경 할적에 디스크 즉 하드디스크에 그것이 저장되는 것

- 일반적으로 정규화시 입력/수정/삭제 성능이 향상되며 반정규화시 조인 성능이 향상된다. 

 

반 정규화 절차

1) 반정규화 대상 조사 

(범위처리빈도수, 범위, 통계성) 

- 자주 사용되는 테이블 에 접근하는 프로세서의 수가 많고 항상 일정한 범위만을 조회하는 경우 

- 테이블에 대량의 데어터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없는 경우 

- 통계성 프로세스에 의해 통계 정보를 필요로 할때 별도의 통계테이블을 생성

- 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 

 

2) 다른 방법 유도 검토

(뷰, 클러스터링, 인덱스 조정) 

- VIEW 사용 : 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 VIEW 사용

(다만, VIEW 가 직접적으로 성능을 향상 시키지는 않는다.) 

- * 클러스터링 : 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우, 클러스터링을 적용하거나 인덱스를 조정함

(조회가 대부분 일때 클러스터링 적용) 

 

3) 파티셔닝

: 대량의 데이터는 PK의 성격에 따라 부분적인 테이블로 분리할 수 있다. 파티셔닝 키에 의해 물리적 저장공간 분리

 

4) 캐시

: 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상시킬 수 있음 


반정규화 기법 

 

<테이블 반 정규화>

분류 기법 내용
테이블 병합 1 : 1 관계 테이블 병합 1 : 1 관계를 통합하여 성능 향상
1 : M 관계 테이블 병함 1 : M 관계를 통합하여 성능 향상
슈퍼/서브타입 테이블 병합 슈퍼/서브 관계를 통합하여 성능 향상
테이블 분할 수직분할 컬럼단위의 테이블을 디스크 I/O를 분산처리하기위해 테이블을 1:1로 분리하여 성능향상
(트랜잭션의 처리되는 유형파악이 선행되어야함)
수평분할 로우단위로 집중 발생되는 트랜잭션을 분석하여 디스크I/O 및 데이터 접근의 효율성을 높여 성능을 향상하기 위해 로우단위로 테이블을 쪼갬 ( 관계가 없음 )
테이블 추가 중복 테이블 추가 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격조인을 제거하여 성능 향상
통계 테이블 추가 SUM, AVG 등을 미리 수행하여 계산해 둠으로써 조회 시 성능을 향상
이력 테이블 추가 이력테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재하는 방법
부분 테이블 추가 하나의 테이블을 전체 칼럼 중 자주 이용하는 집중화된 칼럼이 있을 경우, 디스크I/O를 줄이기 위해 해당 컬럼들을 모아놓은 별도의 반정규화된 테이블을 생성

* 수평/수직 분할의 절차

1. 데이터 모델링을 완성한다. 

2. DB용량을 산정한다. 

3. 대량 데이터가 처리되는 테이블에 대해 트랜잭션 터리 패턴을 분석한다. 

4. 칼럼 단위로 집중화된 처리가 발생하는지 로우단위로 집중화된 처리가 발생하는지 분석하여 

집중화된 단위로 테이블 분리하는 것을 검토한다. 

  - 컬럼 많음 → 1:1 분리

  - 데이터 많음 → 파티셔닝

 

* 슈퍼/서브 타입 모델

슈퍼타입 : 공통 부분

서브타입 : 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성

 

<슈퍼/서브타입 데이터 모델의 변환타입 비교>

구분 OneToOne Type Plus Type Single Type
특징 개별 테이블 유지 슈퍼+서브타입 테이블 하나의 테이블
확장성 우수함 보통 나쁨
조인성능 나쁨 나쁨 우수함
I/O량 성능 좋음 좋음 나쁨
관리용이성 좋지않음 좋지않음 좋음(1개)
트랜잭션 유형에
따른 선택방법
개별 테이블로 접근이 많은 경우 선택 슈퍼+서브 형식으로 데이터를 처리하는 경우 선택 전체를 일괄적으로 처리하는 경우 선택


<칼럼 반정규화> 

기법 내용
중복칼럼추가 조인시 성능저하를 예방하기 위해, 중복된 컬럼을 위치시킴
파생칼럼추가 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능저하를 예방하기 위해, 미리 계산하여 컬럼에 보관
이력테이블
칼럼추가
대량의 이력데이터 처리시 불특정 일 조회나 최근 값을 조회할때 나타날 수 있는 성능저하를 예방하기위해  기능성 컬럼( 최근값부여, 시작일자, 종료일자 ) 를 추가함
PK에 의한 
칼럼추가
복합의미를 갖는 PK를 단일 속성으로 구성했을 때 발생되며, PK 안에 데이터가 존재하지만 성능향상을 위해 일반속성으로 포함하는 방법
응용시스템 오작동을
위한 칼럼추가
업무적으로 의미가 없으나, 데이터 처리시 오류로 인해 원래값으로 복구하길 원하는 경우 이전 데이터를 임시적으로 중복보관하는 방법

<관계 반정규화>

: 무결성 유지

기법 내용
중복관계 추가 데이터를 처리하기위한 여러 경로를 거쳐 조인이 가능하지만, 이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법

* 클러스터

:   디스크로부터 데이터를 읽어오는 시간을 줄이기 위해서 조인이나 자주 사용되는 테이블의 데이터를 디스크의 같은 위치에 저장시키는 방법

 

클러스터된 테이블과 클러스터 되지 않은 테이블의 차이

- 테이블이 처음 생성될 때 행은 일반적으로 세그먼트의 첫 익스텐트의 첫 블록부터 삽입됩니다

- 정규 테이블로 저장될 경우 EMP와 DEPT은 서로 다른 세그먼트에 위치하게 됩니다. 이 말은 테이블이 자신들 고유의 블록을 사용한다는 뜻입니다.

- 테이블이 클러스터로 저장되면 클러스터는 물리적 저장 단위가 되고 테이블은 논리적 엔티티 즉, 클러스터의 일부분이 됩니다.

 

클러스터의 장점

  - 그룹된 컬럼 데이터 행들이 같은 데이터 Block에 저장되기 때문에 디스크 I/O를 줄여 줍니다.

  - 클러스터된 테이블 사이에 조인이 발생할 경우 그 처리 시간이 단축 됩니다.

  - 클러스터키 열을 공유하여 한번만 저장하므로 저장 영역의 사용을 줄입니다.

 

테이블 클러스터링의 특징

  클러스터는 데이터 조회 성능을 향상 시키지만 데이터 저장, 수정, 삭제 또는 한 테이블 전체 Scan의 성능을 감소 시킵니다

클러스터 하기 좋은 테이블

  • 주로 조회가 자주 발생하고 수정이 거의 발생하지 않는 테이블
  •  컬럼안의 많은 중복 데이터를 가지는 테이블
  •  자주 Join되는 테이블

클러스터 Key가 되기 좋은 컬럼

  •  데이터 값의 범위가 큰 컬럼
  •  테이블 간의 조인에 사용되는 컬럼

클러스터 key가 되기 나쁜 컬럼

  •  특정 데이터 값이 적은 컬럼
  •  자주 데이터 수정이 발생하는 컬럼
  •  LONG, LONG RAW 컬럼은 포함할 수 없습니다.


로우 체이닝 : 로우의 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태

로우 마이그레이션 : 테이블 블록에서 수정이 발생하면 수정된 데이털ㄹ 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식

 

***로우 체이닝과 로우 마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 DB 메모리에 디스크 I/O가 발생할때   I/O가 발생하여 성능저하 발생 트랜잭션을 분석하여 적절하게 1:1 관계로 분리함으로써 성능향상이 가능하도록 해야한다.

728x90
반응형
LIST

'Self Study > SQLD' 카테고리의 다른 글

[SQLD] 식별자(Identifiers)  (0) 2022.11.04
[SQLD] 정규화(Normalization)  (0) 2022.11.03
[SQLD] 성능데이터 모델링  (0) 2022.11.03
[SQLD] 관계(Relationship)  (0) 2022.11.02
[SQLD] 속성(Attribute)  (0) 2022.11.02
728x90
SMALL

식별자(Identifiers) 란? 

하나의 엔터티에 구성되어 있는 여러개의 속성중에서 엔터티를 대표할 수 있는 속성을 의미하며 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야한다. 

 

식별자의 특징 

특징 내용 예시
유일성 주식별자에 의해 모든 인스턴스들이 유일하게 구분됨 사원번호가 주식별자일 경우 모든 직원들에 대해 개인별로 고유하게 부여되어야한다.
최소성 주식별자를 주성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야함 사원번호만으로도 고유한 구조인데 ' 사원분류코드+ 사원번호 ' 로 식별자까지 구성될 경우 부적절한 주식별자 구조이다.
불변성 지정된 주식별자의 값은 자주 변하지 않아야함. 변하면 이전 기록이 말소됨 사원번호이 값이 변한단다는 의미는 퇴사하고 새로운 직원이 들어온다는 의미와 같다. 
존재성 주식별자가 지정되면 반드시 값이 존재해야함(NOT NULL) 사원번호가 없는 회사 직원은 있을 수가 없다. 

 

식별자 분류

분류 식별자 설명
대표성여부 주식별자 엔터티 내에서 각 어커런스(인스턴스)를 구분 할 수 있는 구분자, 타 엔터티와 참조관계로 연결할 수 있다. 
보조식별자 구분자이나 대표성이 없고 참조관계 연결이 안된다.
스스로 생성여부 내부식별자 엔터티 내부에서 스스로 만들어지는 식별자
외부식별자 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
속성의 수 단일식별자 하나의 속성으로 구성된 식별자
복합식별자 둘 이상의 속성으로 구성된 식별자
대체여부 본질식별자 업무에 의해 만들어지는 식별자
인조식별자 원조 식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자

 

주식별자 도출 기준 

- 해당 업무에서 자주 이용되는 속성이여야한다. 

- 명칭, 내역 등고 ㅏ같은 이름으로 기술되는 것들은 주식별자로 지정하지 않느다. 

- 복합으로 주식별자를 구성할 경우 너무 많은 속성이 포함되지 않도록 한다. '

   →너무 많으면 인조식별자를 생성한다. 

 

식별자관계와 비식별자 관계에 따른 식별자

항목 식별자관계 비식별자관계
목적 강한 연결관계 표현 약한 연결관계 표현
자식 주식별자
영향
자식 주식별자의 구성에 포함됨 자식 일반 속성에 포함됨
표기법 실선표현 전섬 표현
연결
고려사항
• 반드시 부모 엔터티 종속
• 자식 주식별자구성에 부모 주식별자 포함
• 상속받은 주식별자속성을 타 엔터티에 이전 필요
• 약한 종속관계
• 자식 주식별자구성을 독립적으로 구성
• 자식 주식별자구성에 부모 주식별자 구분 필요 
• 상속받은 주식별자 속성을 타 엔터티에 차단 필요
• 부모쪽의 관계 참여가 선택 관계

주식별자

: 자식의 주식별자로 부모의 주식별자 상속

- 부모로부터 받은 식별자를 자식 엔터티의 주식별자로 이용하는 경우

- 강한 연결관계 표현, 실선 표기 

- 식별자 관계로만 설정 시 주식별자 증가로 오류 유발

 

비식별자

: 부모 속성을 자식의 일반 속성으로 사용 

- 부모없는 자식이 생설 될 수 있는 경우 

- 부모와 자식의 생명주기가 다른 경우 (별도로 소멸) 

- 여러개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가진 경우

- 자식엔터티에 별도의 주식별자를 생성하는 것이 더 유리한 경우 

- SQL문장이 길어져 복잡성 증가되는 것 방지 

- 비식별자 관계로만 설정시 부모 엔터티와 조인하여 성능 저하 

728x90
반응형
LIST

'Self Study > SQLD' 카테고리의 다른 글

[SQLD] 반정규화(De-Normalization)  (0) 2022.11.04
[SQLD] 정규화(Normalization)  (0) 2022.11.03
[SQLD] 성능데이터 모델링  (0) 2022.11.03
[SQLD] 관계(Relationship)  (0) 2022.11.02
[SQLD] 속성(Attribute)  (0) 2022.11.02
728x90
SMALL

정규화(Normalization)란? 

- 다양한 유형의 검사를 통해서 데이터 모델을 좀 더 구조화하고 개선시켜 나가는 절차

- 관계형 스키마를 더 좋은 구조로 정제해 나가는 과성

- 함수적 종속성(속성 간의 관계 분석)을 기반으로 해서 일정한 조건을 만족하는 형태로 엔터티를 분해하는 과정

   * 함수적 종속성 : 속성들 간의 관련성, 이를 이용하여 이상 현상이 일어나지 않는 테이블(릴레이션)로 설계하는 과정이 정규화이다. 

정규화 종류 정규화내용
1차 정규화 복수의 속성값을 갖는 속정을 분리(중복 제거)
2차 정규화 주식별자에 종속적이지 않는 속성을 분리, 부분종속 속성을 분리
3차 정규화 속성에 종속적인 속성의 분리, 이전종속 속성을 분리
보이스-코드 정규화 다수의 주식별자 분리
4차 정규화 다가 종속 속성 분리
(다치 종속 제거)
5차 정규화 결합 종속일 경우 두개 이상의 N개로 분리
(조인 종속성 제거)

정규화가 되지 않았을 때 문제점

- 중복된 정보로 인한 문제

- 특정 정보의 표현 불가

- Null값 보유 

 

이상현상 

: 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 할떄 발생할 수 있는 부작용 

- 삽입 이상 : 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제ㅐ

- 갱신 이상 : 중복 튜플 중 일부만 변경하여 데이터가 불일치 하게 되는 문제

- 삭제 이상 : 튜플을 삭제하면 꼭 필요한 데이터까지 같이 삭제되는 데이터 손실 문제 

 

함수종속

: X Y  일때 

'X가 Y를 함수적으로 결정한다. ' = 'Y가 X에 함수적으로 종속되어 있다.'

릴레이션내의 모든 행을 대상으로 하나의 X값에 대한 Y값이 항상 하나인 경우를 의미한다.

 

함수 종속 관계를 판한할 때 현재의 속성 값을 기준으로 판단하면 안되고 속성에 들어올 수 있는 값들을 고려하여 판단해야한다. 

일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성을 함수적으로 결정한다. 

함수 종속 종류  설명
완전 함수 종속
(Full Functional Dependency)
일반적으로 함수 송족은 완전 함수 종속을 의미하는데 X Y 일때 속성 집합의 일부분에는
Y가 종속되어 있지 않는다. 
부분 함수 종속
(Partial Functional Dependency)
X Y 일때 속성 집함 X의 부분집합에도 Y가 함수적으로 종속도어 있을때 
이행적 함수 종속
(Transitive Functional Dependency)
함수 종속 관계 X Y , Y→ Z가 있으면 논리적으로 X→ Z가 성립된다.이것을 Z가 X에 이행적으로 함수 종속되었다고 한다. 

정규화 1차 정규화(Atomic Columns)
정의 복수의 속성 값을 갖는 속성을 분리하는 것(중복과 반복을 없애는 것) 
(중복속성에 대한 분리 / 로우 단위의 중복 / 칼럼 단위의 중복이 되는 경우 모두 1차 정규화의 대상)
원리 •어떤 릴레이션에 속한 모든 도메인이 원자값만으로 이루어져있다. 
• 모든 속성에 반복는 그룹이 나타지않는다. 
• 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별 할 수 있어야 한다. 
방법 하나의 속성이 하나의 값을 가질 수 있도록 분해 ( 행 증가) 
•여러개의 속성 값을 같는 속성을 다른 관계로 분해 (새로운 엔터티 생성 ) 
비고 •1차 정규화 1차 정규형
•1차 정규형은 모든 속성이 한개의 값을 갖는다.
정규화 2 정규화(No Partial Dependecies부분 종속성)
정의 부분 함수적 종속관계를 제거하는 것
원리 •모든 컬럼이 완전 함수적 종속을 만족한다.
방법 •복합키가 구성되었을떄 부분적으로 종속된 속성을 분해 (새로운 엔터티 생성 )
  부분 함수적 종속을 모두 제거
비고 •2차 정규화  2차 정규형 
•2차 정규형은 기본키(주키)에 대해 완전한 함수 종속관계를 가진다.

 

정규화 3차 정규화(No Transitive Dependencies)
정의 이행 함수적 종속을 제거
*(이행 규칙 : X → Y 이고 Y → Z 이면 X → Z이다.)
원리 •기본키가 아닌 속성들은 기본키에만 의존해얗나다. 
•릴레이션이 2차 정규화 되어있다.
방법 •직별자 외에 속성들 간의 종속이 존재하지 않도록 관계를 분해
비고 •3차 정규화  3차 정규형 
•3차 정규형은 기본키(주키)를 제외한 나머지 속성들 간의 종속이 존재하지 않는다. 
정규화 보이스-코드 정규화(Boyce-Codd NF)
정의 BCNF는 3 정규형보다
강한 정규형 (Strong 3NF라고도 한다.)
원리 모든 결정자는 주식별자가 되어야한다.
* 기본키가 둘 이상의 속성으로 구성된 합성키이고 합성키가 둘 이상 존재하는 경우 발생하는 이상현상을 방지하기 위해 고안
즉, 결정자 중 후보키가 아닌 것들을 제거
방법 •결정자 중 후보키를 제거하도록 테이블을 분해
비고 •BCNF를 만족한다면 3정규형도 만족하지만, 3정규형만 만족한다면 BCNF를 만족할지는 살펴봐야한다. 

 

728x90
반응형
LIST

'Self Study > SQLD' 카테고리의 다른 글

[SQLD] 반정규화(De-Normalization)  (0) 2022.11.04
[SQLD] 식별자(Identifiers)  (0) 2022.11.04
[SQLD] 성능데이터 모델링  (0) 2022.11.03
[SQLD] 관계(Relationship)  (0) 2022.11.02
[SQLD] 속성(Attribute)  (0) 2022.11.02
728x90
SMALL

성능 데이터 모델링 

데이터베이스 성능향상을 목적으로 설계단계의 데이터모델링 때 부터 정규화, 반정규와, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것

 

성능 데이터 모델링 수행시점

- 사전에 할 수록 비용이 들지 않는다. 

- 분석/설계단계에서 성능을 고려한 데이터 모델링을 수행하면, 나중에 성능저하때문에 발생하는 재업무 비용을 최소화 할 수 있다. 

 

성능 데이터 모델링 고려사항

1) 데이터 모델링을 할때 정규화를 정확하게 수행

2) 데이터 베이스 용량산정을 수행

3) 데이터베이스에 발생되는 트랜잭션의 유형을 파악

4) 용량과 트랜잭션 유형에 따라 반정규화를 수행 

5) 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행

6) 성능관점에서 데이터 모델을 검증

 

-> 데이터 모델을 검토할때는 일반적인 데이터 모델규칙만 검증하지 말고, 충분하게 성능이 고려되었는지도 체크리스트에 포함하여 검증하도록 한다. 

 

 

 

728x90
반응형
LIST

'Self Study > SQLD' 카테고리의 다른 글

[SQLD] 식별자(Identifiers)  (0) 2022.11.04
[SQLD] 정규화(Normalization)  (0) 2022.11.03
[SQLD] 관계(Relationship)  (0) 2022.11.02
[SQLD] 속성(Attribute)  (0) 2022.11.02
[SQLD] 엔터티 (Entity)  (0) 2022.11.02
728x90
SMALL

관계(Relationship)의 정의

- 엔터티의 인스턴스 사이의 논리적 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태, 관계의 페어링의 집합

예 ) 강사 - 가르친다(관계) - 수강생

 

관계(Relationship)의 페어링(Pairing)

- 인스턴스간의 개별적 관계 = 페어링   ---> '집합' 의 논리적 표현이 즉, '관계'

- 인스턴스간 관계가 설정되어있는 어커런스(Occurence)를 관계 페어링 이라고 하며, 이러한 관계 페어링의 집합을 관계! 


 

관계의 분류

- 존재에 의한 관계

이벤트나 액션, 행위에 의한 것이 아니라 단순히 소속되어 있기 때문에 나타나는 관계 

부서(엔터티)에 소속된 사원(인스턴스)

- 행위에 의한 관계

특정 행위에 의해 관계가 발생하는 관계

고객(엔터티)는 주문(인스턴스) 한다.(행위)


관계의 표기법

- 관계명(Membership): 관계의 이름, 엔터티가 관계에 참여하는 형태, 각 관계는 2개의 관계명 및 관점을 가짐

- 관계차수(Cardinality): 1:1, 1:M, M:N

관계차수(1:1)
관계차수(1:M)

*한명의 사원은 한 부서에 소속되고 한 부서는 여러 사원을 포함한다.

관계차수 M:N


- 관계선택사양(Optionality): 필수관계, 선택관계

(예시) 선택 관계

- 하나의 주문목록에는 한 개의 목록을 항상 포함하고 한 목록은 여러 개의 주문 목록에 의해 포함될 수 있다.

선택참여하는 엔티티 쪽에 원을 표시한다.


관계 체크사항

두개의 엔터티 사이에서 관계를 정의할 때에는 다음과 같은 사항들을 체크해 보아야 한다.

 

- 두 개의 엔터티 사이에 관심있는 연관규칙이 존재하는가?

- 두 개의 엔터티 사이에 정보의 조합이 발생되는가?

- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?

- 업무기술서, 장표에 관계연결을 가능하게 하는 동사(Verb)가 있는가?

 

[출처] Sql 전문가 가이드

728x90
반응형
LIST

'Self Study > SQLD' 카테고리의 다른 글

[SQLD] 정규화(Normalization)  (0) 2022.11.03
[SQLD] 성능데이터 모델링  (0) 2022.11.03
[SQLD] 속성(Attribute)  (0) 2022.11.02
[SQLD] 엔터티 (Entity)  (0) 2022.11.02
[SQLD] 데이터 모델링의 중요한 세 가지 개념  (0) 2022.11.02
728x90
SMALL

속성(Attribute)이란? 

- 서물의 성질, 본질적인 성질

- 업무에서 필요로하는 정의

- 의미상 더이상 분리되지 않는 정의

- 엔터티를 설명하고 인스턴스를 구성하는 요소 

 

엔터티, 인스턴스와 속성, 속성값에 대한 내용과 표기법 

- 엔터티, 인스턴스, 속성, 속성값의 관계

- 하나의 엔터티는 여러개의 엔터티를 가지고 엔터티는 한개의 속성값만 가질 수 있음

- 하나의 엔터티는 2개 이상의 인스턴스 집합, 2개 이상의 속성

 

* 속성의 표기법

  Barker 표기법 중 * 입력시 입력값이 반드시 있어야 하고(NOT NULL), ㅇ은 있어도 되고 없어도 된다(NULL).

 

속성의 특징

- 반드시 해당 업무에서 필요하고 관리하고 하는 정보이어야 한다.(예: 강사의 교재 이름)

- 정규화 이론에 근간하여 정해진 주식별자에 함수적 종속성을 가져야 한다.

- 하나의 속성에는 한 개의 값만을 가진다. 다중값(하나의 속성에 여러 개의 값이 있음)일 경우 별도의 엔터티를 이용하여 분리한다.

 

 

속성의 분류 

분류 속성 설명
속성의 특성 기본 속성
(Basic Attribute)
업무로부터 추출한 모든 속성
설계 속성
(Designed Attribute)
업무를 규칙화하기위해 새로 만들거나 변형하여 정의하는 속성(코드성, 일련번호 등)
파생 속성
(Derived Attribute)
다른 속성에 영향을 받아 발생하는 속성(계산된 값 등)
*빠른 성능을 낼 수 있도록 원래 속성의 값을 계산, 적을 수록 좋음
엔터티 구성방식 PK(Primary Key) 속성 엔터티를 식별할 수 있는 속성
FK(Foreign Key) 속성 다른 엔터티와의 관계에서 포함된 속성
일반 속성 엔터티에 포함되어있고 PK, FK에 포함되지 않는 속성
세부 의미 유무 단일값 속성
(Single Value)
반드시 하나의 값만 존재(주민등록번호 등)
다중값 속성
(Multi Value)
여러개의 값을 가질 수 있음(전화번호->휴대폰, 집, 회사 전호번호 등) 
*하나의 엔터티에 포함 X -> 1차 정규화를 하거나, 별도의 엔터티를 만들어 관계를 연결해야함

 

도메인(Domain)

 - 각 속성의 값의 범위가 있는데 이를 그 속성의 도메인이라고 한다.

  --> 엔터티 내에서 속성에 대한 데이터타입과 크기 그리고 제약사항을 지정하는 것

  예: 학생이라는 엔터티가 있을 때 학점이라는 속성의 도메인은 0.0에서 4.5 사이의 실수 값

 

속성의 명명(Naming)

  - 해당 업무에서 사용하는 이름을 부여

  - 서술식 속성명은 사용하지 않음

  - 약어사용은 가급적 제한

  - 전체 데이터모델에서 유일성 확보하는 것이 좋음

 

728x90
반응형
LIST

+ Recent posts