공유 기능을 구현하려고 합니다. 테이블 설계 질문드립니다. 0 6 637

by 식민최 [DB 모델링/설계] 테이블 ERD 모델링 mysql [2021.11.02 16:38:55]


비즈니스 설명

영화를 선택해 나만의 컬렉션을 만든 후 추가 할 수 있는 서비스 입니다.

 

1. 유저는 컬렉션을 생성 합니다.

이때, 컬렉션 이름은 중복될 수 없습니다.

다른 사람이 만든 컬렉션과는 중복이 되지만 내가 만든 컬렉션 끼리는 이름 중복이 안됩니다.

2. 영화를 선택하여 컬렉션에 저장합니다.

3. 컬렉션을 특정 유저에게 공유 할 수 있습니다. 

공유받은 사용자는 해당 컬렉션을 열람할 수 있습니다.

 

위 비즈니스를 토대로 현재 까지 생각한 DB 구조 입니다.

2021-11-02-4-33-54

 

전체적으로 문제가 많은것 같아 도움 요청 드립니다

해당 비즈니스는 보통 어떻게 테이블을 설계하나요?

by 마농 [2021.11.02 17:20:17]

영화 테이블과 유저 테이블도 있어야 할 것 같습니다.
컬렉션 이름은 중간에 변경도 가능하지 않나요?
변경 가능성을 염두한다면 이름보다는 별도 ID 를 키로 가져가는게 맞을 듯 하네요.
user_move 와 user_collection_info 가 좀 애매합니다.
영화가 개인에도 속하고 컬렉션에도 속하나요?
영화는 어떻게 관리되나요? 개인이 구매해서 개인에게 귀속되는 건가요?
영화가 어떻게 관리되는지 구체적으로 알아야 할 것 같습니다.


by 식민최 [2021.11.02 17:41:32]

 

 

영화는 어떻게 관리되나요? 개인이 구매해서 개인에게 귀속되는 건가요?
영화가 어떻게 관리되는지 구체적으로 알아야 할 것 같습니다.

영화 테이블과 유저테이블은 존재하지만 따로 스크린샷을 찍지 않았습니다.

영화는 영화 테이블에서 정보를 가져와서 컬렉션에 추가하면 개인이 영화 정보를 수정할 수 있어서 영화 테이블과 관계를 맺지 않았습니다.

한번 컬렉션에 추가하면 해당 영화는 개인에게 귀속된다고 볼 수 있겠습니다.  

컬렉션 이름은 중간에 변경도 가능하지 않나요?

컬렉션 이름 변경 가능합니다. 별도의 ID를 가져가야 겠군요..

user_move 와 user_collection_info 가 좀 애매합니다.
영화가 개인에도 속하고 컬렉션에도 속하나요?

영화는 개인이 가진 컬렉션에 속합니다.

그래서 컬렉션을 가지고 있는 USER_COLLECTION 테이블과

컬렉션별 영화를 가지고 있는 USER_COLLECTION_MOVIE 테이블 두개로 

연관관계를 맺어 설계를 했으나 공유 기능 때문에 위처럼 USER_COLLECTION_INFO 테이블을 따로 뒀습니다..

 


by 동동동 [2021.11.03 09:12:30]

user_collection_info 에 고유ID 추가해서 공유에는 user_collection_info ID와 공유한ID만 있으면 어떨까 합니다..

사용하신 DB디자인 Tool이 뭔가요? 사진을 보니 좋아 보이네요..ㅎㅎ


by 식민최 [2021.11.03 16:53:49]

감사합니다. intellij에 내장되어 있는 datagrip 입니다 ~


by 마농 [2021.11.03 09:12:50]

1. movie_name 수정을 위해 user_movie 테이블을 두신 것 같은데.
- movie_name 은 user_collection_info 에 두시면 어떨까요?
- 이러면 collection 별로 이름을 다르게 지정 할 수 있어서 좋을 것 같습니다.
- 테이블도 하나 줄고요.
2. 공유 정보 테이블의 관계 및 키가 잘못된 것 같네요.
- 관계는 user_collection_info 가 아닌 user_collection 과 맺어야 합니다.
- 따라서 movie_id 는 키에서 빠져야 하고
- share_userid 가 키에 포함되어야 합니다. (여러명에게 공유 가능)
3. user_collection 의 키는
- collection_id 단일키로 하고 user_id 는 일반속성으로 하고
- (user_id, collection_name) 으로 유니크 설정을 따로 하는 게 좋을 것 같습니다.
- user_collection 에 열결되는 테이블은 collection_id 만 상속받고.
- (collection_id, user_id) 복합키도 가능한데
- 복합키의 경우에는 (user_id, collection_id) 순서가 좋을 듯 합니다.


by 식민최 [2021.11.03 16:53:23]

답변 감사합니다 참고하여 설계 했습니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입