스프린트2

2023.12.28(목)

🎨 ERD 업데이트

  • dbdiagram : sql과 비슷한 코드로 ERD를 그리고 FK cardinality도 쉽게 표현 가능해서 좋다!

  • erdcloud : 이것도 많이 사용하는 것 같은데 나중에 써봐야겠다.

    👉내가 dbdiagram에서 만든 ERD 보기

  • 어제 그린 ERD에서 수정된 부분은 다음과 같다.

✏️table명 및 column명 수정

  • 개인적으로 소문자, snake_case, 약어 지양의 규칙을 세워 이름을 지어보았다.
  • 단수형, 복수형 중 무엇을 사용할지는 정말 고민이었는데 일단 단수형으로 썼다.
    • MariaDB 공식 문서의 SQL 예시들을 보면 table 이름이 단수로 되어 있다.
    • 복수형보다는 단수형이 이름 짓기 쉽고 고민할 필요가 없으니까 편할 것 같다.
    • column 값 접근 시에도 예를 들어 books.id보다는 book.id가 테이블에서 각 record가 개별 책을 나타내므로 개인적으로는 더 가독성이 좋아 보인다고 생각한다.
    • 근데 또 복수형도 예를 들어 개별 book들의 집합이니까 books로 쓰는 것이 의미적인 부분에서는 좋은 것 같기도 하고 여전히 고민되긴 한다.
  • 의미를 잘 담을 수 있는 이름으로 지으려고 노력했다.

📝table 설명

  • book

    • isbn은 unique해서 PK로 쓸 수는 있지만 일단은 book table의 PK가 많이 쓰일 것 같아 크기가 작은 INT id를 따로 팠다.
    • isbn은 13자리로 고정이어서 VARCHARCHAR로 변경했다.
    • main_image_id를 추가해서 대표 이미지의 id를 가지고 있도록 했다.
    • 상세 페이지에서 나머지 이미지들은 book_image table에서 book_id를 기반으로 찾으면 된다.
  • book_category

    • 책이 여러 개의 category를 가질 수 있기 때문에 추가한 table이다.
    • book_id와 category_id의 다대다(N:M) 관계를 중간 table을 두어서 1:N, N:1로 풀었다.
    • 따로 id는 쓸 필요가 없을 것 같아서 book_id와 category_id의 조합을 PK로 사용했다.
    • category 여러 개를 JSON에 담아 직렬화해서 그냥 VARCHAR로 저장할 수도 있지만 이 경우 category를 기준으로 정렬하기가 어려워지기 때문에 중간 table을 두었다.
    • 아니면 책마다 가질 수 있는 category 수를 예를 들어 3개로 정해놓으면 category1, category2, category3 field를 book table에 추가하기만 하면 될 것이다.
    • 그런데 사실 수업에서는 그냥 책마다 category를 하나만 가지도록 하는 것 같다. 이 경우에는 그냥 book table에 category_id를 두고 바로 category table과 연결하면 될 것 같다.
  • book_review

    • created_at을 추가했다.
    • 일단 reviewer는 user_id로 하지 않고 이름만 받도록 했다.
  • user table

    • email은 unique해서 PK로 쓸 수는 있지만 일단은 user table의 PK가 많이 쓰일 것 같아 크기가 작은 INT id를 따로 팠다.
  • like table

    • 따로 id는 쓸 필요가 없을 것 같아서 book_id와 user_id의 조합을 PK로 사용했다.
  • order table

    • 일단 결제 정보는 고려하지 않았다.
    • 전화번호(contact)는 최대 15자리여서 VARCHARCHAR로 변경했다.

      전화번호는 크게 국가번호 · 식별번호 · 가입자번호로 구성되는데, 최대 15자리를 넘지 않도록 규정하고 있다.

  • order_detail

    • 따로 id는 쓸 필요가 없을 것 같아서 book_id와 user_id의 조합을 PK로 사용했다.

처음 설계해본 것 치고는 나쁘지 않은 것 같다. 추후 API 설계를 하며 수정해나가야겠다.
JWT를 사용하니 client가 server에 요청할 때마다 해당 token을 header에 담아 server에 전달할 것이다. 아마 payload에 user_id나 email 같은 user의 정보를 담을 테니 이를 기반으로 정보를 가져올 수 있지 않을까 싶다.

profile
이것저것 관심 많은 개발자👩‍💻

0개의 댓글

Powered by GraphCDN, the GraphQL CDN