게임 통계 서버에서 사용하는 관계형 데이터베이스(RDBMS)는 주로 게임 내 이벤트, 유저의 활동 기록, 매치 결과 등을 효율적으로 저장하고 조회할 수 있도록 설계됩니다. 이러한 데이터는 다양한 통계를 생성하는 데 사용되며, 이를 위해 적절한 테이블 구조 설계가 필요합니다.
테이블 설계 개요
유저 테이블 (Players/Users)
- 유저에 대한 기본 정보 및 게임 내 활동 기록을 저장합니다.
- 유저의 상태, 게임 내 레벨, 경험치, 보유 아이템 등도 포함될 수 있습니다.
- 주로
id
,username
,level
,experience
,total_games
,total_wins
등의 필드를 가집니다.
매치 테이블 (Matches)
- 각 게임 매치에 대한 기록을 저장하는 테이블입니다.
- 게임 시작 및 종료 시간, 참여 유저 정보, 승패 결과, 매치 결과 등을 저장합니다.
- 보통
match_id
,player_id
,result
,match_start
,match_end
,score
등의 필드를 가집니다.
아이템 테이블 (Items)
- 유저가 획득한 아이템에 대한 정보를 저장합니다.
- 게임 내 상점에서의 구매 이력이나 전투 중 획득한 아이템 등을 기록합니다.
item_id
,item_name
,player_id
,acquired_at
,item_type
등의 필드가 포함됩니다.
이벤트 테이블 (Events)
- 게임 내 발생하는 다양한 이벤트(퀘스트 완료, 특정 레벨 달성, 특정 아이템 획득 등)를 기록합니다.
event_id
,player_id
,event_type
,event_timestamp
등의 필드를 가집니다.
관계형 데이터베이스 설계 예시
1. 유저 테이블 (Players)
CREATE TABLE players (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username VARCHAR(100) NOT NULL,
level INTEGER DEFAULT 1,
experience INTEGER DEFAULT 0,
total_games INTEGER DEFAULT 0,
total_wins INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- id: 유저의 고유 식별자 (Primary Key)
- username: 유저의 이름
- level: 유저의 게임 내 레벨
- experience: 유저의 경험치
- total_games: 유저가 참여한 게임 총 수
- total_wins: 유저가 이긴 게임 수
- created_at: 유저가 처음 등록된 시간
2. 매치 테이블 (Matches)
CREATE TABLE matches (
id INTEGER PRIMARY KEY AUTOINCREMENT,
player_id INTEGER,
result VARCHAR(10) CHECK(result IN ('win', 'lose')),
score INTEGER,
match_start TIMESTAMP,
match_end TIMESTAMP,
FOREIGN KEY (player_id) REFERENCES players(id)
);
- id: 매치의 고유 식별자 (Primary Key)
- player_id: 해당 매치에 참여한 유저의 ID (Foreign Key,
players
테이블 참조) - result: 해당 매치의 결과 (
win
또는lose
) - score: 유저의 매치 점수
- match_start: 매치 시작 시간
- match_end: 매치 종료 시간
3. 아이템 테이블 (Items)
CREATE TABLE items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
item_name VARCHAR(100),
player_id INTEGER,
acquired_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
item_type VARCHAR(50),
FOREIGN KEY (player_id) REFERENCES players(id)
);
- id: 아이템의 고유 식별자
- item_name: 아이템의 이름
- player_id: 아이템을 획득한 유저의 ID (Foreign Key,
players
테이블 참조) - acquired_at: 아이템을 획득한 시간
- item_type: 아이템의 유형 (무기, 방어구, 소비 아이템 등)
4. 이벤트 테이블 (Events)
CREATE TABLE events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
player_id INTEGER,
event_type VARCHAR(50),
event_description TEXT,
event_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (player_id) REFERENCES players(id)
);
- id: 이벤트의 고유 식별자
- player_id: 이벤트를 발생시킨 유저의 ID (Foreign Key,
players
테이블 참조) - event_type: 이벤트 유형 (예: '퀘스트 완료', '레벨 업')
- event_description: 이벤트에 대한 설명
- event_timestamp: 이벤트 발생 시간
테이블 간 관계
1:N 관계 (Players와 Matches, Items, Events):
- 하나의 유저는 여러 매치, 아이템, 이벤트를 가질 수 있습니다. 이는
player_id
를 통해players
테이블과 참조 관계를 맺고 있으며, Foreign Key로 연결됩니다.
- 하나의 유저는 여러 매치, 아이템, 이벤트를 가질 수 있습니다. 이는
N:M 관계 (선택 사항):
- 만약 팀 플레이를 지원하는 게임이라면, 다대다(N:M) 관계를 위한 별도의 테이블을 만들어 매치에 여러 유저가 참여할 수 있도록 구성할 수 있습니다. 예를 들어,
match_participants
테이블을 두어 여러 유저가 하나의 매치에 참가할 수 있도록 확장할 수 있습니다.
CREATE TABLE match_participants ( match_id INTEGER, player_id INTEGER, FOREIGN KEY (match_id) REFERENCES matches(id), FOREIGN KEY (player_id) REFERENCES players(id), PRIMARY KEY (match_id, player_id) );
- 만약 팀 플레이를 지원하는 게임이라면, 다대다(N:M) 관계를 위한 별도의 테이블을 만들어 매치에 여러 유저가 참여할 수 있도록 구성할 수 있습니다. 예를 들어,
통계 생성 예시
이제 위에서 설계한 데이터베이스를 기반으로 간단한 통계를 SQL로 생성할 수 있습니다.
1. 유저의 승률 계산
SELECT username, total_wins, total_games,
(total_wins * 1.0 / total_games) AS win_rate
FROM players
WHERE total_games > 0;
2. 특정 유저의 매치 히스토리 조회
SELECT m.id, m.result, m.score, m.match_start, m.match_end
FROM matches m
JOIN players p ON m.player_id = p.id
WHERE p.username = 'player1';
3. 최근 아이템 획득 기록 조회
SELECT i.item_name, p.username, i.acquired_at
FROM items i
JOIN players p ON i.player_id = p.id
ORDER BY i.acquired_at DESC
LIMIT 10;
4. 이벤트 로그 조회
SELECT e.event_type, e.event_description, e.event_timestamp, p.username
FROM events e
JOIN players p ON e.player_id = p.id
ORDER BY e.event_timestamp DESC;
결론
게임 통계 서버의 데이터베이스 설계는 유저의 활동을 효율적으로 기록하고 이를 분석할 수 있도록 설계하는 것이 핵심입니다. 유저 테이블, 매치 테이블, 아이템 테이블, 이벤트 테이블 등을 적절히 설계하면 게임 내 다양한 데이터를 수집하여 유의미한 통계를 생성할 수 있으며, 이러한 통계는 게임 밸런스 조정, 유저 만족도 향상, 게임 경제 분석 등에 활용됩니다.
'게임 통계서버의 구성 및 설명' 카테고리의 다른 글
[게임 통계 서버의 구성 및 설명] 게임 통계 서버 구성 6 (2) | 2024.10.23 |
---|---|
[게임 통계 서버의 구성 및 설명] 게임 통계 서버 구성 5 (0) | 2024.10.23 |
[게임 통계 서버의 구성 및 설명] 게임 통계 서버 구성 4 (0) | 2024.10.23 |
[게임 통계 서버의 구성 및 설명] 게임 통계 서버 구성 3 (2) | 2024.10.23 |
[게임 통계 서버의 구성 및 설명] 게임 통계 서버 구성 2 (9) | 2024.10.23 |