https://www.erdcloud.com/d/XyPHd55PTnKNXEjkp
<aside> 🤔
쟁점 : “구독자”를 플레이리스트 테이블의 컬럼으로 둘 것이냐, “구독” 테이블로 분리하여 둘 것이냐
</aside>
@ElementCollection
@CollectionTable(name = "playlist_subscribers")
private List<Long> subscriberIds;
<aside> 🥤
플리 1 - 유저 1, 2, (3)
장점:
단점: -> 무결성, 외래키 제약 조건 위배 -> ** 특정 유저의 구독 플레이리스트 조회 시 모든 플레이리스트를 스캔해야 함 --> 리스트 크기 제한
</aside>
<user 클래스>
@OneToMany(mappedBy = "user")
private List<UserPlaylistSubscription> playlistSubscriptions = new ArrayList<>();
< playlist 클래스 >
@OneToMany(mappedBy = "playlist")
private List<UserPlaylistSubscription> subscriptions = new ArrayList<>();
@Entity
@Table(name = "USER_PLAYLIST_SUBSCRIPTIONS")
public class UserPlaylistSubscription {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "SUBSCRIPTION_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "USER_ID")
private User user;
@ManyToOne
@JoinColumn(name = "PLAYLIST_ID")
private Playlist playlist;
@Column(name = "SUBSCRIBED_AT")
private LocalDateTime subscribedAt;
@Column(name = "NOTIFICATION_ENABLED")
private Boolean notificationEnabled = true;
}
<aside> 🥤
<구독> 플리1 유저1 플리1 유저2
단점:
장점:
</aside>
<aside> 🎉
최종적으로 “구독” 테이블로 분리를 선택
<사유>