데이터베이스개론데이터모델링과ERD 
NHN NEXT 정호영 
나눔고딕및나눔고딕코딩글꼴을설치해주세요.
오늘배울것 
-데이터모델링 
-ER다이어그램 
-관계형데이터모델
데이터모델링이란? 
-현실세계에서 
-응용에필요한데이터를잘고르고다듬어서 
-DBMS에저장하는방법
데이터모델링과정 
1. 요구사항분석(Requirements Analysis) 
2. 개념적설계(Conceptual Database Design) 
3. 논리적설계(Logical Database Design) 
4. 물리적설계(Physical Database Design)
*데이터모델링과정 
1. 요구사항분석(Requirements Analysis) 
2. 개념적설계(Conceptual Database Design) 
3. 논리적설계(Logical Database Design) 
4. 스키마정제(Schema Refinement) 
5. 물리적설계(Physical Database Design) 
6. 응용및보안설계(Application and Security Design)
산출물로본개발단계 
요구사항분석요구사항분석서 
개념적설계ERD 
논리적설계관계형데이터모델(Relationaldatamodel) 
물리적설계SQL
첫번째:요구사항분석 
앱의요구사항을데이터의관점에서바라본다. 
-사용자/앱이데이터베이스에게요구하는것은무엇인가? 
-무엇을어떻게저장할것인가?
회사운영SW요구사항분석:(1)회사분석 
회사는부서로구성되어있다. 
부서는부서이름과부서번호,한명의부장을가진다. 
부장의업무시작날짜를기록한다. 
부서는하나이상의장소에있을수있다.
회사운영SW요구사항분석:(2)프로젝트 
부서는여러프로젝트를관리한다. 
프로젝트는고유번호,고유이름,위치정보를가진다. 
한프로젝트는하나의부서에만속한다.
회사운영SW요구사항분석:(3)사원 
사원은한부서에속한다. 
사원은하나이상의프로젝트에참여한다. 
사원데이터는사번,이름,주소,성별,주소,연봉정보등이다. 
각사원은프로젝트에참여한시간을관리한다. 
각사원은1또는0명의직속상관이있다.
회사운영SW요구사항분석:(4)–부양가족(Dependants) 
사원들의경조사등을위해가족정보를유지한다. 
가족구성원에대해이름,성별,생일,관계만저장한다.
두번째:개념적설계 
요구사항을조금더정형화하기위해사용 
-입력:요구사항분석서 
-출력:ERD(Entity–RelationshipDiagram) 
-수작업또는프로그램(ERWin등)사용
개체와속성(EntityandAttribute) 
개체 
-실제현실에서독립적으로존재하는어떤것 
-직사각형으로표현 
속성 
-개체를설명할수있는특성 
-타원으로표현 
-키속성:개체마다고유한값을가지는속성 
밑줄로표현하며하나이상존재가능 
부서 
부서번호 
부서위치
실습:Entity표현해보기 
종이를꺼내서요구사항분석을보며Entity를그려봅시다.
Relationship:관계 
개체와개체사이의관계를나타냄 
관계도애트리뷰트를가질수있음 
관계에는1:1,1:M,M:N의세가지가존재 
반드시필요한관계는겹줄로표현 
예)사원-부서,부서-매니저,사원-프로젝트 
Department 
Employee 
Works 
1 
N
약개체와식별관계 
부양가족의경우키가없습니다. 
키가없는개체를약개체(weakentity)라고합니다. 
약개체와부모개체와의관계를 
식별관계(identifyingrelationship)라고합니다. 
가족 
사원
실습:Relationship표현해보기 
Entity를그렸던곳에다Relationship도추가해봅시다.
세번째:논리적설계 
ERD의결과를직접SQL로바꾸기는어렵습니다. 
관계데이터모델로변경합니다. 
입력:ERD 
출력:관계데이터모델(논리스키마)
간단한규칙1번:개체테이블 
기본적으로 
ERD의개체는R모델에서테이블(릴레이션)이됩니다. 
사원(ID, … ) 
부서(ID, … ) 
가족(이름, …) 
프로젝트(PID, … )
1:1관계 
관계를맺는개체(테이블)로들어갑니다. 
어떻게해야할까요? 
사원--1 --관리(시작일) == 1 == 부서 
사원(ID, … ) 
부서(ID, … )
1:1관계 
관계를표현하기위해외래키(ForeignKey)를사용합니다. 
테이블이다른테이블의키속성을가지면외래키입니다.
1:1관계 
(1)관계를맺는테이블에외래키를추가합니다. 
(2)관계의속성도테이블의속성으로추가합니다. 
*사원릴레이션에들어가면안되나요? 
사원--1 --관리(시작일) ==1 == 부서
참조무결성제약조건 
외래키의값을제한하는제약조건 
1.외래키는참조하는테이블의기본키를가져옴 
2.반드시NULL이거나 
3.부모테이블에존재하는값이어야함 
위조건을참조무결성제약조건이라고부름 
시험에100%나옵니다.
1:M관계 
1:1관계와비슷하게처리가능 
관계를맺는릴레이션중한쪽에들어가야함 
사원== N== 일한다(배치날짜)== 1 == 부서 
사원(ID, … ) 
부서(ID, … ,부장ID, 부서시작일)
1:N관계 
사원의외래키로부서를추가합니다. 
관계의속성도사원의속성으로추가합니다. 
부서쪽에사원이들어갈수있나요?WHY? 
사원== N== 일한다(배치날짜)== 1 == 부서 
사원(ID, … ,부서ID, 배치날짜) 
부서(ID, … ,부장ID, 부서시작일)
M:N관계는어떻게해야할까요? 
부서== M == 관리한다(시작일)== N == 프로젝트 
부서(ID, … ,부장ID, 부서시작일) 
프로젝트(PID, …)
M:N관계는어떻게해야할까요? 
M:N관계를해소하기위해서는새로운테이블을만들어야합니다. 
새로운테이블의기본키는두테이블의외래키의복합키(?!)입니다. 
부서== M == 관리한다(시작일)== N == 프로젝트 
부서(ID, … ,부장ID, 부서시작일) 
부서_프로젝트관리(DID,PID, 시작일) 
프로젝트(PID, …)
약개체는태생적으로문제점을가지고있습니다. 
부양가족개체부양가족테이블이 
되려면어떤문제가있을까요? 
부양가족(이름, 성별, 생일)
약개체는태생적으로문제점을가지고있습니다. 
부양가족테이블에는키가없습니다. 
테이블은반드시기본키를가져야합니다. 
사원--1 --부양한다(관계)== N == 부양가족 
사원(EID, …) 
부양가족(이름, 성별, 생일)
약개체는태생적으로문제점을가지고있습니다. 
사원의EID와부양가족의이름을합쳐서기본키가됩니다. 
약개체와의관계를식별관계라고합니다. 
식별관계도시험단골문제로나옵니다. 
사원--1 --부양한다(관계)== N == 부양가족 
사원(EID, …) 
부양가족(EID,이름, 성별, 생일)
관계스키마를직접완성해봅시다.
THANK YOU!!!

데이터베이스 모델링