안녕하세요. 디비 설계 중 막히는 부분이 있어 질문드립니다.
우선 구현하고자 하는 시스템은 아래와 같습니다.
- 많은 수의 구성원이 있습니다. 약 1000명 이상입니다. (선수라고 칭합니다. )
- 선수들간의 대결이 이뤄집니다.(권투경기같은 스포츠 생각하시면 됩니다.)
- 해당 경기데이터를 수집하여 DB화 합니다.
- 사용자가 103이라는 선수를 선택하면 103이라는 선수와 나머지 선수들 간의 경기 횟수와 승률이 표시됩니다.(아래 표와 같이)
이제 데이터를 수집해서 DB에 저장하는 작업을 하는 중인데
설계를 어떻게 해야 할지 잘 감이 안잡힙니다.
두 가지 방법을 생각했는데요. 둘 다 이건 아닌데 싶습니다.
우선 선수 코드가 아래와 같이 있구요.
경기 번호를 매기고 모든 경기를 기록 한 후 필요할 때 연산 하려고 하다가
데이터 연산에 따른 성능 저하가 클 것 같아서 승수만 기록하려고 합니다.
우선 첫 번째로 생각했던 방법입니다.
101과 102의 대결에서 101이 승리했다면 위의 1열에 승수를 +1 합니다.
같은 매치업에서 102가 승리했다면 위의 표에서 4열에 승수를 +1 합니다.
101과 102의 승률을 얻어 올 때는 (101의 승수 + 102의 승수)를 총 경기수로 잡고 계산합니다.
제가 문제라고 생각한 부분입니다.
- 선수가 많아 각 매치업마다 두 개의 row를 만들어야 해서 row양이 과도하게 많아짐
- 각 매치업의 승수를 구할 때마다 두 개의 row를 검색하고 연산해야함.
두 번째로 생각한 방법입니다.
101과 102의 대결이 입력되었다면 두 선수의 코드를 비교합니다.
낮은 숫자의 코드(101)를 선수로, 높은 숫자의 코드(102)를 상대선수로 잡습니다.
총 경기 수에 +1을 합니다.
101의 승리시에만 선수 승수에 +1을 합니다.
101과 102의 승률을 얻어 올 때는 총 경기 수와 선수 승수를 이용해 계산합니다.
제가 느끼는 문제점
- 105의 승률을 검색한다고 하면 105는 선수 칼럼에도, 상대선수 칼럼에도 존재합니다. 양측 다 찾아서 승률을 구해야 합니다.
- 뭔가 이상하다고 느껴집니다. 더 좋은 방법이 있을 듯합니다..
디비를 잘 모르는 초보자인데 제가 봐도 조금 이상한거 같아 질문 드립니다.
이러한 목적을 가진 시스템이 드물지는 않을 거 같은데 어떻게 설계를 해야할 지 감이 잡히지 않습니다..
어떤 키워드로 찾아봐야 할지도 모르겠네요.
몇 일간 고민하고 찾아보고 하는데 제 능력으로는 이게 최선이라 도움 요청드립니다.
확실하지 않더라도 생각 말씀해주시면 해당 키워드로 찾아보겠습니다.
고수님들의 도움이 필요합니다 ㅜㅜ