secondary table에 필드 추가하기

2024년 12월 20일 금요일

Today I Learned

날짜

2024년 12월 20일 금요일

내용

순서를 저장하는 법

생성한 배너이미지에서 이미지 순서가 마음대로 변경된다는 이슈가 발견되었다. 난 인스타그램 포스트와 네이버 배너 이미지를 관계를 지어놨다. 여기에 순서는 반영되지 않으니 데이터베이스에서 불러올 때는 실제 유저가 선택한 사진 순서와 다를 가능성이 높았다. 그래서 이를 어찌 처리해야 하나 난감했다. 배너 이미지 데이터에 json 타입으로 데이터를 적어놔야 하나… 난 개인적으로 json 타입을 쓰는 걸 상당히 안좋아 한다. 차라리 테이블을 이나 필드를 만들고 필요할 때 마이그레이션을 하는게 낫지 않나 라는 생각과, 관리를 잘못하면 데이터 형식이 통일되지 않아 발생하는 문제들 등 때문이다. 뭔가 SQL을 쓰는 이점이 사라진다는 기분이 들기도 하고…

본론으로 돌아와 생각보다 쉽게 해결되었는데 나는 배너 이미지와 인스타그램 게시글을 secondary table로 관계를 연결해놨다. 각자가 다대다 관계이기 떄문이다. A라는 게시글은 첫번째 배너이미지에도 들어갈 수 있고, 두번째 배너이미지에도 들어갈 수 있기 떄문에 이렇게 구현해놨었다. 이 테이블이 순서를 나타내는 필드만 추가해주면 됐다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# NaverBannerImage와 InstagramPost 간의 다대다 관계를 위한 중간 테이블 정의
naver_banner_image_instagram_post_association = Table(
    "naver_banner_image_instagram_post_association",
    Base.metadata,
    Column(
        "naver_banner_image_id",
        Integer,
        ForeignKey("naver_banner_image.id", ondelete="CASCADE"),
        primary_key=True,
    ),
    Column(
        "instagram_post_id",
        Integer,
        ForeignKey("instagram_post.id", ondelete="CASCADE"),
        primary_key=True,
    ),
    # 배너 이미지 내에서 사진의 순서를 나타내는 게시글
    Column(
        "index",
        Integer,
        nullable=True,
    ),
)

회고

설계를 잘해놓았다.