● 엔터티의 분류
1) 유형과 무형에 따른 분류
① 유형엔터티 - 물리적 형태가 있음(실체가 있는 대상) - 안정적이며 지속적으로 활용되는 엔터티 - 업무로부터 구분하기가 가장 용이한 엔터티
ex) 사원, 물품, 강사 등
② 개념엔터티 - 물리적인 형태 없음 - 관리해야 할 개념적 정보로부터 구분되는 엔터티
ex)조직, 보험상품 등
③ 사건엔터티 - 업무를 수행에 따라 발생하는 엔터티 - 발생량이 많고 각종 통계자료에 이용
ex) 주문, 청구, 미납 등
2) 발생 시점에 따른 분류
① 기본엔터티 - 그 업무에 원래 존재하는 정보 - 다른 엔터티와 관계에 의해 생성되지 않고 독립적으로 생성 - 타 엔터티의 부모 역할을 하는 엔터티 - 다른 엔터티로부터 주식별자를 상속받지 않고 자신의 고유한 주식별자를 가짐
ex) 사원, 부서, 고객, 상품 등
② 중심엔터티 - 기본엔터티로부터 발생되고 그 업무에서 중심적인 역할 - 많은 데이터가 발생되고 다른 엔터티와의 관계를 통해 많은 행위 엔터티를 생성
ex) 계약, 사고, 청구, 주문, 매출 등
③ 행위엔터티 - 2개 이상의 부모엔터티로부터 발생 - 자주 내용이 바뀌거나 데이터 양이 증가 - 분석 초기 단계보다는 상세 설계 단계나 프로세스와 상관모델링을 진행하면서 도출
ex) 주문(고객과 상품 엔터티로 부터 발생하므로 행위엔터티이기도 함), 사원변경이력, 이력 등
페이지 7 / 373
● 엔터티의 명명
① 현업에서 사용하는 용어 사용
② 가능하면 약자 사용은 자제
③ 단수 명사 사용
④ 모든 엔터티에서 유일하게 이름 부여
⑤ 엔터티 생성 의미대로 이름 부여
● 엔터티와 인스턴스 표기법 - 엔터티는 사각형으로 표현, 속성은 조금씩 다름

ER 모델은 요구사항으로부터 얻어낸 정보들을 개체(Entity), 애트리뷰트(Attribute), 관계성(Relation)으로 기술하는 데이터 모델을 말합니다.

개체( Entity )
개체란 단독으로 존재하는 객체를 의미하며, 동일한 객체는 존재하지 않습니다.
예를 들어, 학생 정보가 학번, 이름, 학년이 있을 때, 3개의 정보가 모두 같은 학생이 오직 한 명이면 이를 개체라고 합니다.
즉, 학생 한명이 개체가 되는 것입니다.
이 개체들의 집합을 Entity Type이라고 합니다. 여기서는 Student, Course가 되겠네요.
ER 다이어그램에서 Entity Type은 네모로 표현합니다.
애트리뷰트, 속성( Attribute )
개체가 갖는 속성을 의미합니다.
예를 들어, Student에서 학번, 이름, 학년 같은 정보를 속성이라 합니다.
ER 다이어그램에서 Attribute는 원으로 표현합니다.
관계 ( Relation )
Entity Type간의 관계를 의미합니다.
예를 들어, 수강을 뜻하는 Takes는 학생과 과목간의 "수강"이라는 관계를 갖습니다.
이 때 Takes를 Relation Type이라 하며, Relation Type 역시 속성을 가질 수 있습니다.
ER 다이어그램에서 Relation은 마름모로 표현합니다.
ER 다이어그램을 구성하는 요소는 위와 같습니다.
이제부터 ER 다이어그램을 그리기 위한 각 요소들을 표현하는 방법에 대해 알아보도록 하겠습니다.
● 속성(Attribute)의 개념 - 속성은 업무에서 필요로 하는 고유한 성질, 특징을 의미(관찰 대상) -> 컬럼으로 표현할 수 있는 단위! - 업무상 인스턴스로 관리하고자 하는 더 이상 분리되지 않는 최소의 데이터 단위 - 인스턴스의 구성 요소
ex) 학생 엔터티에 이름, 학번, 학과번호 등이 속성이 될 수 있음
● 엔터티, 인스턴스, 속성, 속성값의 관계 - 한 개의 엔터티는 2개 이상의 인스턴스의 집합이어야 한다(하나의 테이블은 두 개 이상의 행을 가짐) - 한 개의 엔터티는 2개 이상의 속성을 갖는다(하나의 테이블은 두 개 이상의 컬럼으로 구성됨) - 한 개의 속성은 1개의 속성값을 갖는다(각 컬럼의 값은 하나씩만 삽입 가능) - 속성은 엔티티에 속한 엔티티에 대한 자세하고 구체적인 정보를 나타냄, 각 속성은 구체적인 값을 가짐
● 속성의 특징 - 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다 - 정해진 주식별자에 함수적 종속성을 가져야 한다 - 하나의 속성은 한 개의 값만을 가진다.(한 컬럼의 값은 각 인스턴스마다 하나씩만 저장) - 하나의 속성에 여러 개의 값이 있는 다중값일 경우 별도의 엔터티를 이용하여 분리한다 - 하나의 인스턴스는 속성마다 반드시 하나의 속성값을 가진다
=> 각 속성이 하나의 값을 갖고 있음을 의미(속성의 원자성)
** 원자성이란 - 데이터모델에서 각 엔터티의 인스턴스가 해당 속성에 대해 단일하고 명확한 값을 가지는 것을 의미
1️⃣ 요구사항 수집 분석
데이터베이스를 사용할 사람들이 왜 DB를 사용하는지,
필요한지 용도를 파악하는 단계로 요구사항에 대해 어떤 데이터들이 필요한지, 어떤 기능들이 필요한지 분석하고,
수집된 조건들을 토대로 요구 조건을 명세화합니다.
2️⃣ 개념적 설계
개념적 설계는 현실 세계에 대한 인식을 추상화 시키는 단계. 이 단계는 요구 조건을 분석들을 E-R 다이어그램을 통해 DBMS에 개체, 속성 등의 관계도를 작성하는 단계
DBMS에 대한 독립적인 개념 스키마를 설계
3️⃣ 논리적 설계
현실에서 수집되는 자료를 컴퓨터에 저장할 수 있는 형태로 변환하기 위해 DBMS가 지원하는 논리적인 구조로 변환하는 단계, 개체, 속성으로 기술된 개념 설계 단계의 데이터들을 변환합니다. 데이터베이스의 테이블을 만드는 단계라 생각하면 쉽고, 논리적 설계 단계에서는 트랜잭션의 인터페이스를 설계합니다.
4️⃣ 물리적 설계
논리적 설계단계에서 표현된 데이터를 물리적 저장장치에 저장할 수 있도록 물리적 구조의 데이터로 변환하는 단계입니다.
1) 반응시간, 2) 공간 활용도, 3) 트랜잭션 처리량 등을 고려하며 물리적 구조를 설계해야 합니다.
1) 반응시간: 작업을 요청한 시점부터 결과를 출력하기까지의 소요 시간
2) 공간 활용도: 데이터베이스 파일 및 정보 출력을 위해 소요된 저장공간의 크기
3) 트랜잭션 처리량: 단위시간 동안 데이터베이스가 처리할 수 있는 작업량의 수
물리적 설계 단계는 단순한 파일 저장장치를 구현하는 단계가 아닌 여러 가지 개체 및 속성의 타입을 저장하는 레코드들의 집합입니다. 따라서, 구조, 접근 경로 등을 잘 설정해두어야 하는 단계이며 데이터베이스 시스템의 성능에도 큰 영향을 미치는 단계입니다.
주요작업
요구사항 분석 결과를 기반으로 중요한 개체를 추출하고 개체간의 관계를 결정하여 E-R 다이어그램으로 표현한다.
개체와 속성추출
저장할만한 가치가 있는 중요 데이터를 가진 사람이나 사물
예) 학사행정 데이터베이스 개발에 필요한 개체
학사행정 운영에 필요한 사람 : 학생, 교수, 행정담당자 등
학사행정 운영에 필요한 사물 : 강의실, 행정실, 교자재 등

개체 추출 방법
요구 사항 문장에서 업무와 관련이 깊은 의미 있는 명사
업무와 관련이 적은 일반적이고 광범위한 의미의 명사는 제외
의미가 같은 명사가 여러 개일 경우는 대표 명사 하나만 선택
추출된 명사를 개체와 속성으로 분류
개체 속성 추출 예시
--> 1. 쇼핑몰에 회원으로 가입하려면 회원아이디, 비밀번호, 이름, 나이, 직업을 입력해야 한다.
쇼핑몰은 일반적이고 광범위한 의미의 명사이므로 제외한다.
회원아이디, 비밀번호, 이름, 나이, 직업, 등급, 적립금은 회원의 속성으로 분류한다.
회원아이디는 키 속성으로 분류한다.
개체 : 회원
속성 : 회원아이디, 비밀번호, 이름, 나이, 직업, 등급, 적립금
키 속성 : 회원아이디
---> 2. 회원이 상품을 주문하면 주문에 대한 주문번호, 수량, 배송지, 주문일자 정보를 유지해야한다.
개체 : 회원, 상품
속성 : 주문번호, 주문수량, 배송지, 주문일자
키 속성 : 회원이 상품을 주문 시 생성되는 정보이기 때문에 특정관계(주문)의 속성


개체 간의 관계 추출
관계: 개체간의 의미있는 연관성
개체 간의 관계 추출 방법
요구 사항 문장에서 개체간의 연관성을 의미있게 표현한 동사를 추출한다.
의미가 같은 동사가 여러개일 경우에는 대표 동사 하나만 선택한다.
찾아낸 관계에 대해 매핑 카디널리티와 참여 특성을 결정한다.
매핑 카디널리티 : 1:1 , 1:N, N:M
참여 특성 : 필수적 참여 / 선택적 참여

개체 간의 관계 추출 예시 (1)
관계 : 주문
회원과 상품 개체 관계 : 다대다 (N:M)
회원 : 선택적 참여, 상품 (선택적 참여)
주문관계 속성 : 주문번호, 수량, 배송지, 주문일자
개체 간의 관계 추출 예시 (2)
각 상품은 한 제조업체가 공급하고, 제조업체 하나는 여러상품을 공급할 수 있다.
제조업체가 상품을 공급하면 공급량 정보를 유지해야 한다.
관계 : 공급
상품과 제조업체 개체관계 : 일대다 (1:N)
상품 : 필수적 참여, 제조 (선택적 참여)
공급 관계 속성 : 공급일자, 공급량
개체 간의 관계 추출 예시 (3)
회원은 게시글을 여러개 작성 할 수 있고, 게시글 하나는 한 명의 회원만 작성할 수 있다.
관계 : 작성
회원과 게시글 개체관계 : 일대다 (1:N)
상품 : 선택적 참여, 게시글 (필수적 참여)





일단, 카디널리티는 중복도를 나타냄.
중복도가 낮으면 카디널리티가 높다.
중복도가 높으면 카디널리티가 낮다. 라고 표현한다.
예시
주민등록번호와 이름이라는 컬럼이 있는 테이블이 있다고 가정해보자.
주민등록번호는 값이 중복되지 않는 유일한(Unique) 값이다.
이름은 값이 중복되기도 하는 값이다.
그러므로 주민등록번호의 카디널리티가 이름의 카디널리티보다 높다.
DISTINCT를 사용했을 때의 출력값이 많을수록(사용 전후가 차이가 적을수록) 카디널리티도 높아진다.
참고로 distinct 값이 많다는건 중복도가 낮다는 의미로 보면 된다.
id 컬럼의 경우 distinct 값이 10건이다.
users 테이블의 컬럼간 distinct 값의 차이를 보자면 id(10건) > name(6건) > location(3건) 이다
즉, distinct 값이 많으면 중복도가 낮다 = 카디널리티가 높다고 생각해도 된다.
즉, 카디널리티는 객관적 수치보다는 상대적인 개념으로 이해해야한다.
인덱스를 걸 때, 내가 원하는 데이터를 선택하는 과정에서 최대한 많은 데이터가 걸러져야 성능이 좋을것이다.
(선택하는 데이터가 많아질수록 full scan에 가까워지므로)
즉, 여러 컬럼을 동시에 인덱싱할때, 다음과 같이 카디널리티가 높은 컬럼을(중복이 적은 컬럼을) 우선순위로 두는 것이 인덱싱 전략에 유리하다.
항상 새 줄에서 시작하고 브라우저는 자동으로 요소 앞뒤에 약간의 공백(여백)을 추가합니다.
항상 사용 가능한 전체 너비를 차지합니다.
부모 태그의 너비를 가져옵니다. 높이는 자신의 태그의 자식태그의 높이를 가져옵니다.
일반적으로 사용되는 Block 태그는
와
Inline 태그는 필요한 만큼만 너비를 차지합니다. 대표적으로 태그가 많이 쓰입니다.
3줄 요약
1. DB 모델링 순서는 요구사항 분석 -> 개->논->물이다.
2. 각태그 에는 디폴트 마진과 디폴트 폰트크기 및 디폴트 값이 있다.
3. 태그에는 인라인 태그와 블록태그로 나눌수 있다.