5.2 ER 모델 ( 계속 ) 관계와관계타입 관계는엔티티들사이에존재하는연관이나연결로서두개이상의엔티티타입들사이의사상으로생각할수있음 관계집합은동질의관계들의집합 관계타입은동질의관계들의틀 관계집합과관계타입을엄격하게구분할필요는없음 요구사항명세에서흔히동사는 ER 다이어그램에서관계로표현됨 ER 다이어그램에서다이어몬드로표기 관계타입이서로연관시키는엔티티타입들을관계타입에실선으로연결함 2
5.2 ER 모델 ( 계속 ) 3
5.2 ER 모델 ( 계속 ) 관계의애트리뷰트 관계타입은관계의특징을기술하는애트리뷰트들을가질수있음 관계타입은키애트리뷰트를갖지않음 4
5.2 ER 모델 ( 계속 ) 차수 (degree) 관계로연결된엔티티타입들의개수를의미 실세계에서가장흔한관계는두개의엔티티타입을연결하는 2 진관계 5
5.2 ER 모델 ( 계속 ) 카디날리티 카디날리티비율은한엔티티가참여할수있는관계의수를나타냄 관계타입에참여하는엔티티들의가능한조합을제한함 관계를흔히 1:1, 1:N, M:N으로구분 카디날리티에관한정보는간선위에나타냄 6
5.2 ER 모델 ( 계속 ) 7
5.2 ER 모델 ( 계속 ) 8
5.2 ER 모델 ( 계속 ) 9
5.2 ER 모델 ( 계속 ) 역할 (role) 관계타입의의미를명확하게하기위해사용됨 특히하나의관계타입에하나의엔티티타입이여러번나타나는경우에는반드시역할을표기해야함 관계타입의간선위에표시 10
5.2 ER 모델 ( 계속 ) 전체참여와부분참여 전체참여는어떤관계에엔티티타입 E1의모든엔티티들이관계타입 R에의해서어떤엔티티타입 E2의어떤엔티티와연관되는것을의미 부분참여는어떤관계에엔티티타입 E1의일부엔티티만참여하는것을의미 약한엔티티타입은항상관계에전체참여 전체참여는 ER 다이어그램에서이중실선으로표시 카디날리티비율과함께참여제약조건은관계에대한중요한제약조건 11
5.2 ER 모델 ( 계속 ) 다중관계 두엔티티타입사이에두개이상의관계타입이존재할수있음 12
5.2 ER 모델 ( 계속 ) 순환적관계 하나의엔티티타입이동일한관계타입에두번이상참여하는것 13
5.2 ER 모델 ( 계속 ) 본책의 ER 표기법의요약 14
5.2 복잡한 ER 다이어그램의예 15
5.3 데이터베이스설계사례 관계와애트리뷰트들을식별 ( 계속 ) 16
5.4 ER 스키마를관계모델의릴레이션으로사상 ER 스키마를관계모델의릴레이션으로사상 논리적설계단계에서는 ER 스키마를관계데이터모델의릴레이션들로사상함 ER 스키마에는엔티티타입과관계타입이존재하지만관계데이터베이스에는엔티티타입과관계타입을구분하지않고릴레이션들만있음 릴레이션으로사상할대상이 ER 스키마에서엔티티타입인지또는관계타입인지, 엔티티타입이라면정규엔티티타입인지또는약한엔티티타입인지, 관계타입이라면 2진관계타입인지 3진이상의관계타입인지, 애트리뷰트가단일값애트리뷰트인지또는다치애트리뷰트인지등에따라사상하는방법이달라짐 ER 모델을릴레이션들로사상하는 7개의단계로이루어진알고리즘 17
18
19
ER-관계사상알고리즘단계 1: 정규엔티티타입과단일값애트리뷰트 ER 스키마의각정규엔티티타입 E에대해하나의릴레이션 R을생성함 E에있던단순애트리뷰트들을릴레이션 R에모두포함시킴 E에서복합애트리뷰트는그복합애트리뷰트를구성하는단순애트리뷰트들만릴레이션 R에포함시킴 E의기본키가릴레이션 R의기본키가됨 20
21
ER-관계사상알고리즘 ( 계속 ) 단계 2: 약한엔티티타입과단일값애트리뷰트 ER 스키마에서소유엔티티타입 E를갖는각약한엔티티타입 W에대하여릴레이션 R을생성함 W에있던모든단순애트리뷰트들을릴레이션 R에포함시킴 소유엔티티타입에해당하는릴레이션의기본키를약한엔티티타입에해당하는릴레이션에외래키로포함시킴 약한엔티티타입에해당하는릴레이션 R의기본키는약한엔티티타입의부분키와소유엔티티타입에해당하는릴레이션을참조하는외래키의조합으로이루어짐 22
23
ER-관계사상알고리즘 ( 계속 ) 단계 3: 2진 1:1 관계타입 ER 스키마의각 2진 1:1 관계타입 R에대하여, R에참여하는엔티티타입에대응되는릴레이션 S와 T를찾음 S와 T 중에서한릴레이션을선택하여, 만일 S를선택했다면 T의기본키를 S에외래키로포함시킴 S와 T 중에서관계타입에완전하게참여하는릴레이션을 S의역할을하는릴레이션으로선택함 관계타입 R이가지고있는모든단순애트리뷰트 ( 복합애트리뷰트를갖고있는경우에는복합애트리뷰트를구성하는단순애트리뷰트 ) 들을 S에대응되는릴레이션에포함시킴 두엔티티타입이관계타입 R에완전하게참여할때는두엔티티타입과관계타입을하나의릴레이션으로합치는방법도가능함 24
25
26
ER-관계사상알고리즘 ( 계속 ) 단계 4: 정규 2진 1:N 관계타입 정규 2진 1:N 관계타입 R에대하여 N측의참여엔티티타입에대응되는릴레이션 S를찾음 관계타입 R에참여하는 1측의엔티티타입에대응되는릴레이션 T의기본키를릴레이션 S에외래키로포함시킴 N측의릴레이션 S의기본키를 1측의릴레이션 T에외래키로포함시키면애트리뷰트에값들의집합이들어가거나정보의중복이많이발생함 관계타입 R이가지고있는모든단순애트리뷰트 ( 복합애트리뷰트를갖고있는경우에는복합애트리뷰트를구성하는단순애트리뷰트 ) 들을 S에해당하는릴레이션에포함시킴 27
28
ER-관계사상알고리즘 ( 계속 ) 단계 5: 2진 M:N 관계타입 2진 M:N 관계타입 R에대해서는릴레이션 R을생성함 참여엔티티타입에해당하는릴레이션들의기본키를릴레이션 R에외래키로포함시키고, 이들의조합이릴레이션 R의기본키가됨 관계타입 R이가지고있는모든단순애트리뷰트 ( 복합애트리뷰트를갖고있는경우에는복합애트리뷰트를구성하는단순애트리뷰트 ) 들을릴레이션 R에포함시킴 29
30
ER-관계사상알고리즘 ( 계속 ) 단계 6: 3진이상의관계타입 3진이상의각관계타입 R에대하여릴레이션 R을생성함 관계타입 R에참여하는모든엔티티타입에대응되는릴레이션들의기본키를릴레이션 R에외래키로포함시킴 관계타입 R이가지고있는모든단순애트리뷰트 ( 복합애트리뷰트를갖고있는경우에는복합애트리뷰트를구성하는단순애트리뷰트 ) 들을릴레이션 R에포함시킴 일반적으로외래키들의조합이릴레이션 R의기본키가됨 관계타입 R에참여하는엔티티타입들의카디날리티가 1:N:N이면카디날리티가 1인릴레이션의기본키를참조하는외래키를제외한나머지외래키들의조합이릴레이션 R의기본키가됨 31
32
ER-관계사상알고리즘 ( 계속 ) 단계 7: 다치애트리뷰트 각다치애트리뷰트에대하여릴레이션 R을생성함 다치애트리뷰트에해당하는애트리뷰트를릴레이션 R에포함시키고, 다치애트리뷰트를애트리뷰트로갖는엔티티타입이나관계타입에해당하는릴레이션의기본키를릴레이션 R에외래키로포함시킴 릴레이션의 R의기본키는다치애트리뷰트와외래키의조합 33
34
데이터베이스설계사례에알고리즘적용 단계 1: 정규엔티티타입과단일값애트리뷰트 EMPLOYEE(Empno, Empname, Title, City, Ku, Dong, Salary) PROJECT(Projno, Projname, Budget) DEPARTMENT(Deptno, Deptname, Floor) SUPPLIER(Suppno, Suppname, Credit) PART(Partno, Partname, Price) 35
데이터베이스설계사례에알고리즘적용 ( 계속 ) 단계 2: 약한엔티티타입과단일값애트리뷰트 DEPENDENT(Empno, Depname, Sex) 단계 3: 2 진 1:1 관계타입 PROJECT(Projno, Projname, Budget, StartDate, Manager) 단계 4: 정규 2진 1:N 관계타입 EMPLOYEE(Empno, Empname, Title, City, Ku, Dong, Salary, Dno) PART(Partno, Partname, Price, Subpartno) 36
데이터베이스설계사례에알고리즘적용 ( 계속 ) 단계 5: 2 진 M:N 관계타입 WORKS_FOR(Empno, Projno, Duration, Responsibility) 단계 6: 3 진이상의관계타입 SUPPLY(Suppno, Projno, Partno, Quantity) 단계 7: 다치애트리뷰트 PROJ_LOC(Projno, Location) 37
회사 ER 스키마는관계데이터베이스에서총 9개의릴레이션으로사상되었음 EMPLOYEE(Empno, Empname, Title, City, Ku, Dong, Salary, Dno) PROJECT(Projno, Projname, Budget, StartDate, Manager) DEPARTMENT(Deptno, Deptname, Floor) SUPPLIER(Suppno, Suppname, Credit) PART(Partno, Partname, Price, Subpartno) DEPENDENT(Empno, Depname, Sex) WORKS_FOR(Empno, Projno, Duration, Responsibility) SUPPLY(Suppno, Projno, Partno, Quantity) PROJ_LOC(Projno, Location) 38