비즈니스 설명
영화를 선택해 나만의 컬렉션을 만든 후 추가 할 수 있는 서비스 입니다.
1. 유저는 컬렉션을 생성 합니다.
이때, 컬렉션 이름은 중복될 수 없습니다.
다른 사람이 만든 컬렉션과는 중복이 되지만 내가 만든 컬렉션 끼리는 이름 중복이 안됩니다.
2. 영화를 선택하여 컬렉션에 저장합니다.
3. 컬렉션을 특정 유저에게 공유 할 수 있습니다.
공유받은 사용자는 해당 컬렉션을 열람할 수 있습니다.
위 비즈니스를 토대로 현재 까지 생각한 DB 구조 입니다.
전체적으로 문제가 많은것 같아 도움 요청 드립니다
해당 비즈니스는 보통 어떻게 테이블을 설계하나요?
영화는 어떻게 관리되나요? 개인이 구매해서 개인에게 귀속되는 건가요?
영화가 어떻게 관리되는지 구체적으로 알아야 할 것 같습니다.
영화 테이블과 유저테이블은 존재하지만 따로 스크린샷을 찍지 않았습니다.
영화는 영화 테이블에서 정보를 가져와서 컬렉션에 추가하면 개인이 영화 정보를 수정할 수 있어서 영화 테이블과 관계를 맺지 않았습니다.
한번 컬렉션에 추가하면 해당 영화는 개인에게 귀속된다고 볼 수 있겠습니다.
컬렉션 이름은 중간에 변경도 가능하지 않나요?
컬렉션 이름 변경 가능합니다. 별도의 ID를 가져가야 겠군요..
user_move 와 user_collection_info 가 좀 애매합니다.
영화가 개인에도 속하고 컬렉션에도 속하나요?
영화는 개인이 가진 컬렉션에 속합니다.
그래서 컬렉션을 가지고 있는 USER_COLLECTION 테이블과
컬렉션별 영화를 가지고 있는 USER_COLLECTION_MOVIE 테이블 두개로
연관관계를 맺어 설계를 했으나 공유 기능 때문에 위처럼 USER_COLLECTION_INFO 테이블을 따로 뒀습니다..
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) 순서가 좋을 듯 합니다.