charny
106
2020-09-29 16:59:23
6
629

가계부 DB설계에 대한 질문드립니다.


안녕하세요. 

개인 프로젝트를 해보던 중 DB 설계에 궁금한 점이 생겨서 질문드립니다. (매우 초보적인 질문일 수도 있습니다...)




위의 이미지처럼 뱅크샐러드에 가입하게 되면 수십가지의 카테고리가 기본적으로 제공되고 이것을 추가/편집 할 수 있게 되어있는데요. 이 부분을 1:N 관계의 user 테이블과 category 테이블을 만들고 새로운 사용자가 등록될 때마다 가입된 유저의 id값을 외래키로 갖는 기본 카테고리들을 저장 해주는 방법으로 구현하려 했습니다.


그런데 이 방법은 사용자가 가입될 때마다 동일한 카테고리가 계속 쌓이게 되는데 이후에 사용자의 설정에 따라 사용자화 되는 부분이기 때문에 이런 방법으로 구현을 해도 괜찮을까요? 일반적으로 이렇게 모든 사용자마다 동일한 기본 데이터를 할당해 줄 때는 어떤 방법으로 DB를 설계하는 것이 좋을까요? 많은 조언 부탁드립니다. 🙇‍♂️


0
  • 답변 6

  • 달고나치약
    347
    2020-09-29 17:12:02

    userCategory란 테이블을 따로 만들어

    그곳에 category의 id와 user의 id를 같이 보관하는건 어떨까요

  • charny
    106
    2020-09-29 17:29:47

    kudy

    그 방법도 고민을 해보긴 했었는데요. 

    한 유저가 카테고리 정보를 사용자화 하기 위해 변경하면 같은 카테고리를 참조하는 다른 유저에게도 영향을 주지 않을까요??

  • 달고나치약
    347
    2020-09-29 17:36:27

    charny 

    위에 카테고리는 고정으로 보이니까

    그 카테고리를 통해 맵핑 테이블을 만들어 관리하게 되면

    다른 사용자와 충돌할 일이 없지 않을까 생각합니다.

    위의 카테고리 테이블에서 사용자 아이디를 추가하여 보관하게 되면 불필요하게 동일한

    데이터가 쌓이는게 아닌가 싶습니다.

    해당 맵핑 테이블에서 수정, 삭제, 추가 하고 관리하는 기능적 면에서 좋다고 생각합니다.



  • charny
    106
    2020-09-29 17:44:22

    kudy

    혹시 말씀해주신 매핑 테이블이 아래와 같은 구조일까요?? 아래와 같은 구조에서 카테고리의 이름은 category 테이블에서 관리되는데 누군가 카테고리의 이름을 변경하면 참조에 의해 다른 사용자에서도 변경된 이름으로 보여질 것 같은데 충돌을 어떻게 피해야 할까요 ?? 제가 잘못 이해하고 있는걸까요 ㅠㅠ?


  • 달고나치약
    347
    2020-09-29 17:57:41

    위의 카테고리 이름이 고정이 아닌건가요?

    만약 위의 카테고리 내용이 고정이고 예를 들어 식비 라는 카테고리 항목에

    배달 이라는 카테고리를 추가 하고싶다면

    category 테이블에도 해당 내용을 입력합니다

    예를 들어 user id = u1, category id = c1 로 지정한 후

    새로이 입력된 배달 이라는 항목은 category id = c2로 입력되겠죠?

    그 후 user_category에 

    primay key / user_id / category_id / category_id 2

    1                / u1        /  c1                 / c2

    이런식으로 해당 카테고리 내용 안에 중분류 카테고리 category_id 2가 추가되어 관리 되는식입니다.

    해당 방식이 충돌할 일이 없지 않을까요?

    저도 짧은 지식이라 많은 도움을 못드리네요

  • charny
    106
    2020-09-29 18:04:59

    kudy

    아 뱅샐 앱을 확인해보니 기본으로 주어지는 카테고리의 '식비' 라는 1차 분류도 변경/삭제가 가능하고 그 하위 카테고리도 변경/삭제가 가능한  구조입니다. 

    그리고 답변을 주시고 같이 고민해주신 것 만으로도 너무너무 감사드립니다.


  • 로그인을 하시면 답변을 등록할 수 있습니다.