게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
DB 설계 관련하여 조언 부탁드립니다!
게시물ID : programmer_11266짧은주소 복사하기
작성자 : 물어라이코스
추천 : 0
조회수 : 1275회
댓글수 : 12개
등록시간 : 2015/06/15 02:34:57
옵션
  • 본인삭제금지
안녕하세요!

졸업 프로젝트로 롤 관련 정보 제공 서비스를 만들고 있습니다.

게임에 관련된 데이터가 json 으로 제공되는데, 이걸 받아와서 DB에 저장하고 통계자료를 보여주는 겁니다.

문제는... 제공되는 DB 구조를.... mysql에 넣자니 어떻게 DB를 설계하고 넣어야할지 모르겠습니다.. ㅜㅜ

기존에 해본건 게시판이나 랭킹 데이터를 넣고 빼고 수정하는 정도였지..

이렇게 방대한 로그형 데이터를 관리해본적이 없어서..

정규화를 해야할지 말아야할지도 참 고민이 많습니다.

어떻게 하는 것이 현명한지 조언 부탁드립니다.


제공되는 데이터들을 간략히 설명드리자면...

1)[게임고유번호] : 각 게임별로 붙는 고유 번호입니다.
2)[게임맵] : 해당 게임이 어느 맵에서 진행되었는지 알려줍니다.
-중략-
3)[플레이어 리스트] : 해당 게임에 참여한 플레이어를 별도의 데이터 셋트로 제공합니다.(json배열)
4)[플레이어의 전적] : 해당 플레이어의 게임 플레이 정보를 제공합니다.

[플레이어 리스트]
3)-(1) [플레이어1] : 플레이어1의 아이디
3)-(2) [플레이어1의 코드] : 해당 플레이어가 해당 게임에서 부여받은 고유 번호
3)-(3) [플레이어의 고유 번호] : 해당 플레이어의 고유 번호 (전체 유저 중 고유 번호)
...

[플레이어의 전적]
4)-(1) [킬] : 해당 플레이어의 킬수
4)-(2) [데스] : 해당 플레이어의 데스 수
...

-후략-

이런식입니다..
배열로 설명드리자면,
1차원 배열이 있고 1차원 배열 항목 중 하나를 열어보면 다시 2차원 배열...
이런식으로 3~4차원 배열까지 존재합니다.


이거야 애초에 지원하는 데이터 형식이고, 이것을 제 나름대로 정리하여 DB를 만들려고 했습니다.

그러자 생기는 문제는... 게임 고유 번호와 플레이어의 번호를 어떻게 이을 것인가하는 문제였습니다.

- 테이블 -
1. 게임 정보를 저장하는 테이블
[게임 고유번호], [게임 맵]....

2. 플레이어 정보를 저장하는 테이블
[게임 고유번호], [플레이어 고유 번호], [킬], [데스] ...


문제는 게임 정보 테이블에서는 기본키가 [게임 고유번호]가 되므로 별 문제가 되지 않습니다만...
두번째 테이블인 플레이어 정보 저장 테이블에서는..
[게임 고유번호]와 [플레이어 고유 번호]가 중복이 된다는 겁니다.
A - 1
A - 2
A - 3
B - 1
B - 2
B - 3
이런식으로 중복이 되게 됩니다.


그래서 현재 생각중인 방안은... 이렇습니다.

1. 하나의 테이블만 만든다.
이유 : 데이터 수정/삭제가 거의 일어나지 않으며 조회/입력만 반복될 데이터이므로 정규화를 하지 않고 하나의 테이블에 몽땅 때려박는다.
예상되는 단점 : 데이터의 중복이 발생한다. (하나의 게임에 10명이 플레이 하므로, 게임 고유코드와 맵 등 한 게임에 대한 정보가 10번씩 입력되어야함)
예상되는 단점2 : 기본키를 뭘로 하지?! (게임 고유코드와 유저 고유코드 모두 중복이 발생함.)
--> 혹시 두 컬럼을 묶어서 기본키로 쓸 수 있나요? 그럴리가..?

2. 가능한한 테이블을 쪼개서 저장한다.
이유 : 최대한 정규화 시킨다.
예상되는 단점 : JOIN을 시켜야하는데, 대부분 조회/입력 작업이 반복되므로 쿼리문이 복잡해지거나 JOIN 때문에 부하가 심해진다.
예상되는 단점2 : 설계에 더 머리가 아파지고 어렵다. (;;;;;)

3. 목적에 따른 테이블을 만들어서 사용한다.
이유 : 사용 목적에 따라 용도별로 테이블을 만들어서 데이터를 저장한다. 다루기가 편하다.
예상되는 단점 : 데이터의 중복이 발생한다. (A테이블에 있는 내용 중 일부가 B테이블에도 존재)


지향하는 방향은, 방대한 양의 데이터를 모두 수용하는 것입니다.

주로 발생할 작업은 사용자가 아이디를 검색했을때 해당 아이디에 대한 데이터(유저 고유 코드를 통한 검색)를 불러내서 사용자에게 보여주는 것과,
짧으면 하루에 한번정도 전체 데이터에서 특정 조건으로 통계자료를 뽑아내는 것 입니다.

데이터의 대부분은 수정/삭제 작업이 발생하지 않고 조회/삽입 작업만 발생합니다.

음..

위에서 제가 생각하고 있는 1번이나 2번 방안 중 무언가를 생각하는게 좋을까요 아니면 다른 방법을 구상하는게 좋을까요?

이런류의 데이터를 다뤄본적도 없고 참고할만한 자료를 찾지 못해서 어떻게 해야할지 전혀 방향을 잡지 못하고 있습니다. ㅠㅠ

짧은 조언이라도 해주시면 정말정말 감사하겠습니다!!!
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호