ERD (엔티티 관계도)
Last updated
Last updated
DB를 설계할 때 정규화로 테이블을 쪼개놓으면 좋다고 했습니다.
하지만 테이블을 그런 식으로 100개 만들어놓으면
나중에 테이블 하나를 보고있을 때 이게 어떤 용도의 테이블인지 판단하기 어렵습니다.
그래서 테이블들의 관계를 도식화해서 그려놓기도 하는데 이걸 엔티티 관계도 (ERD) 라고 부릅니다.
이렇게 생겼습니다.
새로운 기능 만들 때 DB설계를 위해 ERD부터 그리라고 요구하는 사람이 있기도 하고
JOIN연산같은거 할 때 관계를 한 눈에 파악할 때도 ERD를 찾기도 합니다.
아무튼 ERD 그리는 법을 알아봅시다.
직접 종이에 그려도 되고 아니면 무료 온라인 ERD 그리기 프로그램들도 많습니다.
ERD그리면 DDL 문법으로 바꿔주는 곳들도 있음
실은 테이블들을 직접 만들어뒀다면 ERD 그리는건 쉽습니다.
저번 시간에 만들었던 program, teacher 테이블 아무거나 열어서
상단에 '엔티티관계도'라는 메뉴를 눌러보십시오.
그럼 이런 그림이 뜨는데 이게 ERD 입니다.
테이블 간에 어떤 관계가 있는지 선으로 알려줍니다.
1. 일단 네모는 테이블 1개를 의미합니다. 테이블의 모든 컬럼명을 세로로 적어줍니다.
2. 열쇠는 대부분 primary key라는 뜻입니다.
3. 테이블끼리 Foreign key로 연결되어있으면 선으로 이어줍니다.
나머지 표기형식에 관한 내용은 링크를 참고합시다.
온라인 쇼핑몰을 운영하려고 하는데 ERD부터 그려 봅시다.
검색해보면 온라인 쇼핑몰 ERD 예시들 많은데 그런거 베껴주는게 더 빠르지만
우린 직접 그려봅시다.
구글에 erd 같은거 검색하면 온라인으로 그려볼 수 있는 사이트 많은데
우린 이런 사이트에서 한 번 만들어봅시다. 가입하고 free plan 고르면 됩니다.
이외에도 여러 ERD 그릴 수 있는 사이트 들이 있습니다.
Lucidchart 사이트에서 Document 하나 만들면 이제 ERD 그릴 수 있는데
왼쪽에 보시면 More Shape 버튼 눌러서 Entity Relationship 버튼 체크해둬야 이쁘게 테이블 그릴 수 있습니다.
우선 ERD를 잘 그리고 싶으면 필요한 테이블과 컬럼부터 전부 그려놓으면 됩니다.
무슨 테이블이 필요할지 모르겠으면 여러분이 만들고 싶은 쇼핑몰의 기능들을 쭉 나열해보고
그걸 구현하기 위해 어떤 데이터들을 + 어떤 테이블에 저장해둘지 정리해두면 됩니다.
물론 정규화해서요.
- 회원가입기능
- 상품주문기능
일단 간추려서 이런 기능 2개만 필요하다고 가정해봅시다.
그럼 일단 회원가입을 위해선 회원아이디, 비번, 이름 같은걸 테이블에 저장해놔야하고
상품을 주문하면 주문날짜, 주문상품, 주문한사람을 테이블에 저장해놔야하지 않겠습니까
이건 제 생각일 뿐이고 여러분 생각은 다를 수 있으니 알아서 자신있게 합시다.
아무튼 결정했으면 그걸 테이블과 컬럼으로 그리십시오.
컬럼은 세로로 기재하면 됩니다.
- 박스에 우클릭하면 컬럼하나 추가할 수 있습니다.
Primary key 역할 컬럼은 굵게 처리하거나 PK라고 기입하는 경우가 많습니다.
상품을 누가 샀는지 기록하기 위해서
주문내역table에 '회원table의 id컬럼' 도 넣었는데 그런 foreign key 컬럼은 FK라고 기입하는 경우가 많습니다.
-편의를 위해 상품은 한 가지만 살 수 있다고 가정합시다.
지금 딱 보면 회원table & 주문내역table은 서로 관련이 있죠?
회원table의 id컬럼을 주문내역table에서 가져다쓰니까요.
그런 식으로 Foreign key로 연결된 테이블들이 있으면 선으로 다 이으면 됩니다.
근데 선에 특별한 표시를 하는 경우가 있습니다.
지금 회원1명이 -> 주문내역을 최소 몇개 ~ 최대 몇개나 가질 수 있죠?
0개 ~ 무한히 가질 수 있죠?
그럼 그걸 선에 표기하면 됩니다.
0개를 표현하려면 O
1개를 표현하려면 |
무한히를 표현하려면 Ψ
쓰십시오.
그래서 회원1명은 주문내역을 0개부터 무한대만큼 가질 수 있다고 표기해주면 됩니다.
그럼 반대로 주문내역 1개는 -> 회원을 최소 몇개 ~ 최대 몇개 가질 수 있죠?
그것도 계산해서 위에 표기해주면 됩니다.
최소1개, 최대 1개로 표시하면 될 것 같습니다.
그래서 이렇게 그려봤습니다.
이게 선 그리는 법입니다. 최소, 최대만 잘 기입하면 됩니다.
(참고)
테이블 관계를 부모/자식 관계에 빗대어 표현하는 경우가 있습니다.
내가 다른 테이블에서 컬럼을 빌려쓰고 있으면 자식테이블,
내가 가진 컬럼을 다른 테이블에 빌려주고 있으면 그 친구는 부모테이블이라고 비유해서 부릅니다.