DB - ERD 세부 개념과 작성 방법

장택진·2022년 11월 9일
0

ERD 작성 이유

  • ERD에 핵심은 테이블의 구조를 시각적으로 한 눈에 볼 수 있게 해주기 때문에 이해하기 용이하는데 있습니다.

  • 관계와 관계간의 정보를 나타냄으로써 어떤 테이블 구조로 만들었는지 알 수 있기 때문입니다.

  • create문을 작성해주어 따로 작성하지 않아도 되는 장점이 있습니다.

ERD 구조

  • ERD실체(Entity), 속성(Attribute), 관계(Relationship)로 구성되어 있습니다.

Entity

  • Entity는 실체로써 정의 가능한 사물이나 개념을 말합니다.

  • 예로 가게, 회원등이 있습니다.

  • 위로 예시들자면 장바구니, tb_basket이라고 볼 수 있습니다.

Attribute

개체가 가지고 있는 속성입니다.

  • 회원을 예로 들자면 회원번호,비밀번호,아이디,휴대폰번호 등이 있을 수 있습니다.

  • 위로 예시를 들자면 식별자, 상품개수, 등록일자, 사용여부 등이라고 볼 수 있습니다.

PK, FK
PK와 FK가 존재합니다.
PK는 기본키로써 다른 속성과 차별되게 고유값을 가지고 있는 속성입니다.
예를 들어 대한민국 국민으로 예를 들면 다른 사람과 구분될 수 있는 주민등록번호 같은 고유한 속성을 나타냅니다.
FK는 관계에서 다른 객체의 PK의 값을 나타냅니다.
뒤에 좀 더 자세히 설명할 예정이지만 간단히 설명하자면 위의 그림에서 장바구니를 어떤 유저가 담았는지 알기 위해 유저의 PK값인 user_no가 존재하는 것입니다.

Relationship

  • Entity와 Entity간의 관계를 나타냅니다.

  • 1:1, 1:다수, 다수:다수의 관계가 있습니다.

  • 쉽게 설명하자면 하나의 회원은 여러개의 장바구니를 가질 수 있습니다.
    이때는 회원 1 : 장바구니 다수의 관계가 되겠죠
    이처럼 관계는 전반적인 영향을 끼치기 때문에 설계할때 유의해서 설계해주어야합니다.

위에서부터 차례대로 간단하게 설명하자면

  1. 없어도 돼고 하나있어도 돼고 다중도 돼는 표시
  2. 없거나 다중만 돼는 표시
  3. 없거나 하나있어도 돼는 표시
  4. 하나이거나 다중
  5. 오직 한개
  6. 다중
  7. 한개
  • 예를 들어 설명하자면 배달앱의 경우 여러개의 회원주소를 가지고 한개를 메인으로 지정할 수 있습니다.

  • 그럴때 위같이 없어도 돼고 하나 있어도 돼고 다중도 돼는 표시를 사용합니다.

  • 처음 가입할때 주소를 입력 안 할 수도 있는 설계를 반영했기에 저렇게 사용했습니다.

  • 처음 가입할때 주소를 입력하는 구조라면 4번에 해당하는 하나이거나 다중 값으로 해주면 됩니다.

식별관계, 비식별관계

  • 관계를 설정할때 식별관계와 비식별관계가 있습니다.

  • 식별관계는 FK를 PK처럼 객체를 구분하는 값으로 볼것인가 아닌가에 있습니다.

  • 쉽게 설명하면 휴대폰 인증을 할때 이름,통신사,휴대폰번호로 구분하는 것처럼 동일한 값이 있을 수도 있기에 식별관계로 이걸 복합키로 만들어줍니다.

기본키, 복합키, 인조키
기본키는 그대로 PK 단일입니다.
복합키의 경우 PK와 FK의 혼합입니다.
인조키 복합키가 복잡하기 때문에 임의의 PK를 만들어 기본키 역할을 합니다.

ERD 작성법

  • 기초적인 설명이 끝났으니 간단한 ERD를 만들어보겠습니다.

  • 회원이 장바구니를 통해 구매를 할 수 있고 회원은 여러개의 주소를 저장할 수 있다.라는 간단한 걸로 설계를 해보겠습니다.

  1. 회원은 장바구니를 통해 구매를 할때 회원 단일로 존재할 수 있기에 0조건을 충족해야하고 하나만 담을수도 있고 여러개를 담을 수 있기 때문에 이 관계를 1:다수의 관계가 됩니다.
  2. 회원은 여러개의 주소를 저장할 수 있다면 회원이 가입할때 주소를 요구하지 않았다면 0조건을 충족 하나만 저장할수도 있기에 1개의 조건을 충족 여러개도 저장할 수 있기에 이거 역시 1:다수의 관계가 됩니다.

    식별관계와 비식별관계는 PK가 생성될때 자동으로 인덱스가 생성되기 때문에 어떤 방법으로 설계할 것인가에 따라 달라집니다.

인덱스(Index)
DB에서 select를 빨리하기 위해 만들어둔 즐겨찾기같은 개념입니다.

profile
필요한 것은 노력과 선택과 치킨

0개의 댓글