ER Relationship model ( ER MODEL )
엔티티
- ER MODEL 의 기본
- DB의 가장 작은 단위
속성 ( Attribute )
- 엔티티를 설명하는 특성
- 엔티티는 각각의 속성에 값을 가지고 있다.
- 각각의 속성은 관련된 데이터 타입을 가진다.
속성의 종류
타입
엔티티 타입
- 같은 속성을 가진 엔티티들의 타입, 엔티티의 구분을 위해 사용한다.
- EMPLOYEE, COMPANY
엔티티 셋
- 특정 엔티티 타입을 가지는 모든 엔티티들의 컬렉션
ER Diagram
- Relationship이 없는 ER model
관계
- 두개 혹은 그 이상의 엔티티들의 관계
- 단일 : unary
- 두개 : binary
- 세개 : tertiary
역할
- 관계에서 엔티티는 역할을 가진다.
- 역할은 이름을 가진다.
- EMPLOYEE : employee / worker
- DEPARTMENT : department / employer
자기참조관계 / Recursive relationship
Cardinality ratio ( of binary relationship )
- 1:1, 1:N, N:1, N:M
- 관계는 별도로 표기한다.
1:1 Relationship
M:N Relationship
Participation Constraints
Total participation
- 관계에 대해 최소한 한개 이상이 참여해야 하는 경우
- EX. 주문 <> 물품
- 주문이 있으려면 관련된 물품이 하나는 있어야 한다.
- 두줄로 표현
Partial participation
- 관계에 대해 참여하지 않아도 되는 경우
- EX. 고객 <> 주문
- 어떤 고객은 주문을 아예 안할수도 있다.
- 한줄로 표현
- 학생은 수업을 안들을수 있지만, 수업은 학생이 있어야 한다.
Relationship Attribute
- 관계에 대해 특정 속성을 가질수 있다.
- 대부분의 M:N 관계에서 사용된다.
Weak entity types
- 자기 자신을 위한 key값을 가지지 않는 엔티티 타입, Key를 가지면 Strong entity type
- 자식 엔티티 타입으로도 불린다.
- 다른 엔티티 ( 부모 엔티티 ) 와 관련됨으로서 식별될수 있다.
- 두개의 사각형으로 표기한다.
관련 엔티티
- Partial key
- 강한 엔티티 타입의 키와 결합해서 쓰일 때 자신의 엔티티를 고유하게 식별해주는 약한 엔티티 타입이 가진 키
- 같은 소유 엔티티에 존재하는 다른 약한 엔티티를 구분하기 위해 사용된다.
- 점선으로 표기한다.
- 이 외에도 자신을 소유한 엔티티를 식별하기 위한 값을 가진다. ( 대체로 부모 엔티티의 id를 사용 )
관계
- Strong type과 Weak type 의 관계는 두개의 마름모로 표기
- Weak entity는 반드시 관계가 필요 ( total participation ) 하다.
엔티티 명명규칙
- 단수형
- 대분자
- 속성은 첫글자 대문자
- 역할은 소문자
- 속성은 추가 명사 사용
- 관계는 동사 사용
Participation constraint (min, max) notation
- 관계 타입과 엔티티 타입을 연결하는 실선 위에 (min, max) 형태로 표기한다.
- 어떤 관계 타입에 참여하는 각 엔티티 타입에 대하여,
min은 이 엔티티 타입 내의 각 엔티티는 적어도 min 번 관계에 참여함을 의미한다.
min=0 : 어떤 엔티티가 반드시 관계에 참여해야 할 필요는 없음을 의미한다.
- 어떤 관계 타입에 참여하는 각 엔티티 타입에 대하여,
max는 이 엔티티 타입 내의 각 엔티티는 최대 max 번 관계에 참여함을 의미한다.
max=* : 어떤 엔티티가 관계에 임의의 수만큼 참여할 수 있음을 의미한다.
관계에 참여하는 엔티티의 숫자가 아니라, 하나의 엔티티가 몇 번 관계에 참여하는 가를 나타낸다.
Constraint Violations
UPDATE 연산자
- 튜플을 삽입/삭제/변경하는 연산자
- 위 연산들이 적용될때 반드시 Integrity constraint가 위반되어선 안된다.
Integrity violation시 대처법 4가지
- Violation을 일으키는 연산자의 실행을 취소한다.
- RESTRICT, REJECT - 대부분의 DBMS
- 연산을 실행하되 사용자에게 Violation 을 알린다.
- VIOLATION을 일으키지 않게 추가적인 업데이트를 실행
- CASCADE, SET NULL SET DEFAULT
- 사용자가 지정한 에러 수정 루틴을 실행한다.
INSERT에서 가능한 VIOLATION
- PK자리에 NULL값을 넣기
- PK는 Entity Integrity Constraint 에 의해 NULL값이 될수 없다.
- 중복된 값을 PK로 넣기
- PK는 튜플을 식별하기 위한 값이기에 반드시 Unique 해야 한다.
- FK에 해당하는 PK가 없는 값 지정하기
- Referential Constraint 를 위반한다.
DELETE에서 가능한 VIOLATION
- 다른 FK가 참조중인 PK를 가지는 튜플을 삭제하려 할때 VIOLATION 이 생길수 있다.
- 이 경우는 아래와 같이 해결할수 있다.
- 참조중인 튜플이 있어 삭제연산을 거부
- 참조중인 튜플까지 같이 삭제
- 참조중인 튜플의 FK값을 NULL/기본값으로 만듦
- 위 해결방식은 반드시 테이블 만들때 FK 지정 당시 적어둬야 한다.
UPDATE에서 가능한 VIOLATION
DOMAIN CONSTRAINT
- Update에서 Attribute에 허용된 값이 아닌 다른 값이 업데이트 되려는 경우
NOT NULL CONSTRAINT
- NULL값이 될수 없는데 NULL로 업데이트 하는 경우
이외
- PK가 업데이트 되는 경우
- 튜플을 하나 삭제하고 새로 넣는것과 동일하다.
- FK가 업데이트 되는경우
- Referential constraint 를 어길수도 있다.
Transaction
- 모두 진행되거나 아니면 아무것도 실행되지 않아야 하는 DB 연산자들의 모임
- 수많은 상용 어플리케이션에서 사용