우리가 데이터베이스에 데이터를 저장하기 위해서는 우선 어떤 데이터를 어떻게 저장할 것인지 생각해보아야 합니다.
그렇게 등장한 개념이 도메인이라는 것인데
여러 데이터들을 대표하는 하나의 형태
라고 저는 정의를 내립니다.
그리고, 모델링을 할때 큰 그림에서 세분화 시키는 방식으로 가야하기 때문에
모델링을 하기위해 우리는 1차도메인 설정을 합니다.
맛집이 어딘지 서비스를 제공해주기 위해서는 음식점을 방문한 사람들의 데이터가 필요하죠?
그 데이터는 어떻게 만들어지는지 부터 생각을 해봅시다.
"사람이 식당을 방문하면" 생기겠죠?
그 이후에 별점도 달고, 리뷰도 남기고, 식당에는 주소가 있고.. 등등 부가적인 데이터는 그 이후에 파생이 되요.
결국 사람과 식당이라는 명사 사이에 방문이라는 동사 즉, 행위가 일어나고
이 명사들을 1차 도메인으로 두고, 동사를 2차도메인으로 설정하면서 시작하면 되요.
사용자 테이블
사용자번호 | 사용자이름 |
---|
맛집 테이블
가게번호 | 가게이름 | 메뉴1,메뉴2... |
---|
위처럼 ,가 나오게된다면 그때 테이블 분리를 진행해 주면 되요.
맛집상세 테이블
가게번호 | 메뉴 | 사진 |
---|---|---|
가게번호1 | 메뉴1 | 사진1 |
가게번호2 | 메뉴1 | 사진2 |
가게번호3 | 메뉴2 | 사진3 |
이처럼 pk가 여러번 중복되면 까마귀발을 선택하면 되요
맛집테이블 -l---E 맛집상세테이블
여기에서 복합키를 사용할건지, 아니면 pk를 두고 기존의 pk를 fk로 둘건지에 따라 점선 실선을 정하면 되는데,
맛집테이블이 수정,삭제가 될 때 맛집상세 테이블이 같이 영향을 받는다면, 굳이 pk로 두지 않아도 되고,
만약 게시글과 댓글처럼 독립적인 시간영향을 받는다면 pk를 두면 되겠죠?.
방문 테이블
사용자번호 | 가게번호 | 방문시간 |
---|---|---|
사용자1 | 가게1 | 09/22 |
사용자1 | 가게2 | 09/23 |
사용자2 | 가게2 | 09/24 |
사용자와 가게전부 여러번나오죠? 그러면 두 테이블전부 까마귀 발이에요.
사용자 -l---E 방문, 맛집 -l---E 방문
pk를 둬서 이런식으로 풀어나갈수도 있겠죠?
방문번호 | 사용자번호 | 가게번호 |
---|---|---|
방문번호1 | 사용자1 | 가게1 |
방문번호2 | 사용자2 | 가게1 |
방문번호3 | 사용자2 | 가게2 |
조금더 테이블을 세분화 시킨다면 이렇게도 가능해요
방문번호 | 메뉴사진 | 별점 |
---|---|---|
방문번호1 | 사진1 | 5 |
방문번호1 | 사진2 | 5 |
방문번호1 | 사진3 | 5 |
정리하자면,