• 관계형데이터베이스의 관계!를 알아보자

    2017. 9. 2. 09:56

    by. 위지원

    오랜만에 여유가넘치는 주말이다! ㅎㅎㅎㅎ

    나른한 오전을 위해 내가좋아하는 디비를 공부해보쟈


    관계란?

    관계라는것은 두 엔티티사이의 논리적인 관계를 말한다. 

    애매한 동사로는 관계를 정의하지 않고 현재형으로 표현한다.


    부서는 사원을 포함하고 사원은 부서에 소속된다



    관계의 차수

    자 이제 관계의 차수에 대해 알아보자. 내가 세상에서 제일 햇갈려하는 부분이다. 오늘 확실히 알아보자

    차수는 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

    대화의 장 💬