안녕하세요! <div><br></div> <div>졸업 프로젝트로 롤 관련 정보 제공 서비스를 만들고 있습니다.</div> <div><br></div> <div>게임에 관련된 데이터가 json 으로 제공되는데, 이걸 받아와서 DB에 저장하고 통계자료를 보여주는 겁니다.</div> <div><br></div> <div>문제는... 제공되는 DB 구조를.... mysql에 넣자니 어떻게 DB를 설계하고 넣어야할지 모르겠습니다.. ㅜㅜ</div> <div><br></div> <div>기존에 해본건 게시판이나 랭킹 데이터를 넣고 빼고 수정하는 정도였지..</div> <div><br></div> <div>이렇게 방대한 로그형 데이터를 관리해본적이 없어서..</div> <div><br></div> <div>정규화를 해야할지 말아야할지도 참 고민이 많습니다.</div> <div><br></div> <div>어떻게 하는 것이 현명한지 조언 부탁드립니다.</div> <div><br></div> <div><br></div> <div>제공되는 데이터들을 간략히 설명드리자면...</div> <div><br></div> <div>1)[게임고유번호] : 각 게임별로 붙는 고유 번호입니다.</div> <div>2)[게임맵] : 해당 게임이 어느 맵에서 진행되었는지 알려줍니다.</div> <div>-중략-</div> <div>3)[플레이어 리스트] : 해당 게임에 참여한 플레이어를 별도의 데이터 셋트로 제공합니다.(json배열)</div> <div>4)[플레이어의 전적] : 해당 플레이어의 게임 플레이 정보를 제공합니다.</div> <div><br></div> <div>[플레이어 리스트]</div> <div>3)-(1) [플레이어1] : 플레이어1의 아이디</div> <div>3)-(2) [플레이어1의 코드] : 해당 플레이어가 해당 게임에서 부여받은 고유 번호</div> <div>3)-(3) [플레이어의 고유 번호] : 해당 플레이어의 고유 번호 (전체 유저 중 고유 번호)</div> <div>...</div> <div><br></div> <div>[플레이어의 전적]</div> <div>4)-(1) [킬] : 해당 플레이어의 킬수</div> <div>4)-(2) [데스] : 해당 플레이어의 데스 수</div> <div>...</div> <div><br></div> <div>-후략-</div> <div><br></div> <div>이런식입니다..</div> <div>배열로 설명드리자면,</div> <div>1차원 배열이 있고 1차원 배열 항목 중 하나를 열어보면 다시 2차원 배열...</div> <div>이런식으로 3~4차원 배열까지 존재합니다.</div> <div><br></div> <div><br></div> <div>이거야 애초에 지원하는 데이터 형식이고, 이것을 제 나름대로 정리하여 DB를 만들려고 했습니다.</div> <div><br></div> <div>그러자 생기는 문제는... 게임 고유 번호와 플레이어의 번호를 어떻게 이을 것인가하는 문제였습니다.</div> <div><br></div> <div>- 테이블 -</div> <div>1. 게임 정보를 저장하는 테이블</div> <div><span style="font-size:9pt;line-height:1.5;">[게임 고유번호], [게임 맵]....</span></div> <div><br></div> <div>2. 플레이어 정보를 저장하는 테이블</div> <div>[게임 고유번호], [플레이어 고유 번호], [킬], [데스] ...</div> <div><br></div> <div><br></div> <div>문제는 게임 정보 테이블에서는 기본키가 [게임 고유번호]가 되므로 별 문제가 되지 않습니다만...</div> <div>두번째 테이블인 플레이어 정보 저장 테이블에서는..</div> <div>[게임 고유번호]와 [플레이어 고유 번호]가 중복이 된다는 겁니다.</div> <div>A - 1</div> <div>A - 2</div> <div>A - 3</div> <div>B - 1</div> <div>B - 2</div> <div>B - 3</div> <div>이런식으로 중복이 되게 됩니다.</div> <div><br></div> <div><br></div> <div>그래서 현재 생각중인 방안은... 이렇습니다.</div> <div><br></div> <div>1. 하나의 테이블만 만든다.</div> <div>이유 : 데이터 수정/삭제가 거의 일어나지 않으며 조회/입력만 반복될 데이터이므로 정규화를 하지 않고 하나의 테이블에 몽땅 때려박는다.</div> <div>예상되는 단점 : 데이터의 중복이 발생한다. (하나의 게임에 10명이 플레이 하므로, 게임 고유코드와 맵 등 한 게임에 대한 정보가 10번씩 입력되어야함)</div> <div>예상되는 단점2 : 기본키를 뭘로 하지?! (게임 고유코드와 유저 고유코드 모두 중복이 발생함.)</div> <div>--> 혹시 두 컬럼을 묶어서 기본키로 쓸 수 있나요? 그럴리가..?</div> <div><br></div> <div>2. 가능한한 테이블을 쪼개서 저장한다.</div> <div>이유 : 최대한 정규화 시킨다.</div> <div>예상되는 단점 : JOIN을 시켜야하는데, 대부분 조회/입력 작업이 반복되므로 쿼리문이 복잡해지거나 JOIN 때문에 부하가 심해진다.</div> <div>예상되는 단점2 : 설계에 더 머리가 아파지고 어렵다. (;;;;;)</div> <div><br></div> <div>3. 목적에 따른 테이블을 만들어서 사용한다.</div> <div>이유 : 사용 목적에 따라 용도별로 테이블을 만들어서 데이터를 저장한다. 다루기가 편하다.</div> <div>예상되는 단점 : 데이터의 중복이 발생한다. (A테이블에 있는 내용 중 일부가 B테이블에도 존재)</div> <div><br></div> <div><br></div> <div>지향하는 방향은, 방대한 양의 데이터를 모두 수용하는 것입니다.</div> <div><br></div> <div>주로 발생할 작업은 사용자가 아이디를 검색했을때 해당 아이디에 대한 데이터(유저 고유 코드를 통한 검색)를 불러내서 사용자에게 보여주는 것과,</div> <div>짧으면 하루에 한번정도 전체 데이터에서 특정 조건으로 통계자료를 뽑아내는 것 입니다.</div> <div><br></div> <div>데이터의 대부분은 수정/삭제 작업이 발생하지 않고 조회/삽입 작업만 발생합니다.</div> <div><br></div> <div>음..</div> <div><br></div> <div>위에서 제가 생각하고 있는 1번이나 2번 방안 중 무언가를 생각하는게 좋을까요 아니면 다른 방법을 구상하는게 좋을까요?</div> <div><br></div> <div>이런류의 데이터를 다뤄본적도 없고 참고할만한 자료를 찾지 못해서 어떻게 해야할지 전혀 방향을 잡지 못하고 있습니다. ㅠㅠ</div> <div><br></div> <div>짧은 조언이라도 해주시면 정말정말 감사하겠습니다!!!</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.