-
오랜만에 여유가넘치는 주말이다! ㅎㅎㅎㅎ
나른한 오전을 위해 내가좋아하는 디비를 공부해보쟈
관계란?
관계라는것은 두 엔티티사이의 논리적인 관계를 말한다.
애매한 동사로는 관계를 정의하지 않고 현재형으로 표현한다.
부서는 사원을 포함하고 사원은 부서에 소속된다
관계의 차수
자 이제 관계의 차수에 대해 알아보자. 내가 세상에서 제일 햇갈려하는 부분이다. 오늘 확실히 알아보자
차수는 3가지가 있다. 1:1 1:N N:M
관계차수는 두 엔티티간에 관계에서 해당테이블의 참여자 수를 표현한다.
1이면 1번 N,M이면 여러번~
1:1의 관계 :
한 부서는 한 명의 사원을 포함한다.
한 사원은 한 부서에 속한다.
예제가 썩 좋진 않지만 아무튼 서로 한개씩 갖는 커플같은 관계다.
1:N의 관계 :
한 부서에는 여러 사원을 포함한다.
한 명의 사원은 한 부서에 속한다
그러니깐 까치발 모양기준으로 설명할때.. 테이블쪽에 있는 모양이(까치발모양이지 현재는..) 참여자의 수라고 이해하면 햇갈리지 않을것같다..
N:M의 관계:
한 부서에는 여러 사원을 포함한다.
한 명의 사원은 여러 부서에 속한다.
자 관계맺은걸 보면 왜 테이블이 3개가 되었느냐 하면 알아보자 (N:M은 안되는 관계라고 들었지만 정확히 왜?는 몰랐으니..)
이 링크를 참조하면 관계디비에서는 일반적으로 다대다관계를 구현할 수 없다고한다.
쉽게 생각해도 안되는일이라는것은 쉽게 생각할 수 있다. 일이 꼬여버릴것이다!
그래서 연결테이블이라는 세번째 테이블을 사용하여 두 테이블을 연결시키는 것이다. 이때 연결하는 컬럼은 두테이블의 PK를 참조하는 FK를 포함하는 테이블이다.
각각보면 1:N 1:N으로 해서 세번째테이블과 관계를 맺고 있다.
관계의종류
관계의 종류에는 일반적인 관계인 정상관계외에 재귀적관계,병렬관계,슈퍼/서브타입 관계식별,비식별관계가있다.
재귀적 관계 : 자기자신과 관계를 맺는 관계
어따써먹는가 했는데 계층적관계를 쓸때 유용하다고한다. 예를들면 CPU+RAM=본체 이런식으로..?
병렬 관계 : 두 엔티티사이의 관계가 2개다.
슈퍼타입과 서브타입의 관계 : 슈퍼타입이 공통 컬럼을 가지고있고 각 서브타입의 엔티티들은 관계를 맺고있다.
-배타적관계 : 슈퍼타입의 엔티티가 반드시 딱 한 서브타입엔티티에만 속함
-포함관계 : 그냥둘다속할수있음
식별,비식별관계 : 부모의 PK를 자식의 PK로 쓰면 식별관계다.
[식별] [비식별]
'2017년 > Database' 카테고리의 다른 글
시공간 데이터베이스 (0) 2017.10.30 데이터베이스 정규화 (0) 2017.09.10 sqlalchemy relationship (2) 2017.08.29 mysql 프로시저,함수,트리거,커서 (1) 2017.08.15 mysql innodb table row rock에 대해 알아보자 (0) 2017.08.11