📝 ERD (Entity Relationship Diagram)
- 시스템의 엔티티들이 무엇이 있으며 각각 어떤 관계가 있는지를 나타내는 다이어그램이다.
ERD 작성법
- 모든 엔티티들을 정의한다.
- 엔티티 간 연관 관계들을 정의한다.
연관 관계를 매핑할때는 두 가지 키워드를 고려 해야 한다.
- 방향
- 단방향 : Table1, Table2 중 어느 한쪽만 참조하는 관계
- 양방향 : Table1, Table2 서로 참조하는 관계
- 다중성
- 1 : 1 (one to one) : Table1의 로우와 Table2의 로우가 정확히 일대일 매칭이 되는 관계가 one to one 관계이다.
- 1 : N (one to many) : Table1의 로우가 Table2의 여러 로우와 연결이 되는 관계가 one to many 관계이다.
- N : N (many to many) : Table1의 여러 로우가 Table2의 여러 로우와 연결이 되는 관계가 many to many 관계이다.
- 속성 값들을 추가 한다.
Foreign key(외부키)
- 관계형 데이터베이스에서 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키를 의미한다.
- 즉, Table과 Table의 연결은 Foreign key(외부키)라는 개념을 사용하여 연결이 가능하다.
여러 Table에 정보를 저장하고 연결하여 사용하는 이유
- 하나의 Table에 모든 정보를 입력하면 정보들의 중복 발생이 불가피하다.
- 더 많은 디스크를 사용하게 되고, 데이터가 잘못 저장 될 가능성도 높아진다.
- 여러 테이블에 나누어 저장한 후 필요한 테이블끼리 연결시킴으로써 디스크를 효율적으로 사용하고 데이터의 중복 문제를 해결할 수 있다.
- 이것을 normalization(정규화)라고 한다.
[실습] - 스타벅스 서비스 모델링
🌈 스타벅스 음료 페이지 모델링하기
👉 필수 구현 사항 : 음료, 카테고리, 영양 정보, 알러지, 음료 이미지, 음료 설명, 신상 여부
👉 구현 제외 사항 : 프로모션, 음료 사이즈
- ERD 작성법에 따라 음료 페이지의 모델링을 위해 필요한 Table 수를 정하고 Table 간 연관관계를 생각해보았다.
- Table의 수는 7개가 필요할 것이라 판단하였다.
- menu, categories, drinks, nutritions, images, allegies, drinks-allegies(중간테이블)
- Table의 이름은 소문자, 복수형으로 명명한다.
✅ 나의 답안
1) 메뉴-카테고리-상품의 분류
- 구조상 상품 정보의 골격을 이루는 상품의 분류 테이블을 3개 생성하였다. 스타벅스 홈페이지를 보면 메뉴 항목안에 음료가 있고, 음료 안에 각각의 상품이 있는것을 볼 수 있다. 예를 들어 "나이트로 바닐라 크림" 이라는 상품은 "음료-콜드브루-나이트로 바닐라 크림"과 같은 순으로 찾아야 한다.
- 따라서 menus, categories, drinks 테이블을 생성하고 각각의 테이블은 one to many로 설정하여 category 테이블에는 menu_id를 외래키로, drinks 테이블에는 category_id를 외래키로 지정하였다.
2) 상품명-이미지url, 상품명-영양정보 table들의 연결
- 상품명(drinks)과 영양정보(nutritions)의 관계는 one to one이다. nutritions에 많은 컬럼이 있긴하나 하나의 로우는 하나의 상품과 매칭 된다. 상품명과 이미지url(images)은 one to many 관계이다. 이미지가 복수로 등록된 경우도 있기 때문이다.
3) 상품명-알러지 정보의 연결(many to many)
- 상품명(drinks)과 알러지(allegies)의 관계는 many to many 이다. many to many 관계에서 중간테이블(drinks-allergies)의 생성은 필수이며 drinks_id, allergies_id, id 로 구성된다.