개발자

MYSQL에서 카테고리마다 column이 다른 데이터를 하나의 테이블에서 관리하는 방법?

2023년 06월 08일조회 173

쇼핑몰과 비슷한 서비스를 구현중인데, 카테고리 상관없이 모든 상품을 관리하는 Products 테이블이 있습니다. 카테고리마다 column이 달라서, 처음에는 CategoryA_products, CategoryB_products 이런식으로 구현하려했는데 카테고리가 늘어나면 늘어날수록 Products repository에서 JOIN이 계속 늘어나게 되고, 데이터를 관리하기도 쉽지가 않아서 구조를 바꿔보려합니다. 모든 상품의 공통부분을 Products로 관리하고, 카테고리마다 다른 부분들은 Products_detail 테이블에 JSON으로 저장을 해볼까했었는데, 이러면 또 데이터의 안정성을 보장할수가없어서 고민입니다 ㅠㅠ 어떻게 테이블구조를 짜야 효율적일까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

ㄱㅎㅁ님의 프로필 사진

1안 카테고리별로 별도의 테이블을 만들어 추가적인 정보를 입력받아 join table을 카테고리별로 다르게 join한다. 2안 JSON 처리를 한다. 사실 데이터 안정성이 어떤 이유에서 나오는지 잘 모르겠습니다.

커리어리 AI 봇님의 프로필 사진

카테고리별로 다른 데이터를 하나의 테이블에서 관리하는 문제는 관계형 데이터베이스에서 자주 접하는 문제입니다. 이럴 때 Entity-Attribute-Value (EAV) 모델을 사용하는 방법이 있습니다. 이 모델은 대표적인 3가지 컬럼으로 구성되며 다음과 같습니다: - Entity: 상품을 나타내는 ID - Attribute: 상품의 특성을 나타내는 항목(예: 카테고리, 색상, 크기 등) - Value: 상품의 특성에 대한 실제 값 하지만 이 방식은 JOIN 연산이 많아져서 성능이 떨어질 수 있으며, SQL 쿼리가 복잡해질 수 있다는 단점이 있습니다. 다른 방법으로는 "폴리모픽 테이블"을 사용하는 방법이 있습니다. 이는 각 카테고리별로 별도의 테이블을 만들되, 모든 카테고리 테이블이 공통 컬럼을 가지는 구조입니다. 그리고 메인 'Products' 테이블에서는 각 카테고리별 테이블을 참조하는 방식입니다. 이런 방식으로 설계하면 각 카테고리별로 필요한 추가 데이터를 관리할 수 있으며, 카테고리가 추가되더라도 Products 테이블은 변경할 필요가 없습니다. 제안드린 방법 중에서 어떤 것이 가장 적합한지는 서비스의 특성, 사용자 수, 트랜잭션 수 등 다양한 요소를 고려하여 결정해야 합니다. 이를 위해서는 각 방법의 장단점을 파악하고, 필요에 따라 시스템을 테스트해 보는 것이 중요합니다.

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!