먼저 질문부터!

“나는 스포츠 경기에서 어떤 정보를 관리하려고 하는 걸까?”

이 질문이 바로 DB 목적을 명확히 하는 출발점이다.

 


예시 1: 경기 결과를 저장하려는 경우

DB 목적: “각 팀의 경기 결과(승/패/무, 점수 등)를 저장하고 분석한다.”

 

테이블 설계 방향 예:

  • Match (경기 일시, 장소)
  • Team (팀 이름, 리그 정보 등)
  • Match_Result (팀별 점수, 승/패 여부)

→ 이 DB는 경기 결과 통계용이다. 예를 들어:

“2025년 4월 10일, 서울 팀 vs 부산 팀, 점수는 3:2, 승자는 서울 팀”


예시 2: 선수별 기록을 저장하려는 경우

DB 목적: “선수 개인의 경기 내 활동(득점, 어시스트, 반칙 등)을 기록한다.”

 

테이블 설계 방향 예:

  • Player (선수 이름, 포지션, 소속팀)
  • Match (경기 정보)
  • Player_Stats (경기당 득점, 패스, 반칙 등)

→ 이 DB는 개인 성적 관리용이다.

“김철수 선수, 2025년 4월 10일 경기에서 2골, 1어시스트”

 


예시 3: 리그 순위 관리를 위한 DB

DB 목적: “한 시즌 동안 팀들의 순위를 계산한다.”

테이블 설계 방향 예:

  • League (시즌 정보)
  • Team
  • Team_Standing (승/무/패, 승점, 순위)

→ 이건 시즌 통계 / 리그 순위 집계용 DB이다.

“서울 팀은 10승 2무 3패, 승점 32점으로 1위”

 


✅ 결론: 목적이 다르면 DB도 다르다!

목적 주요 테이블 설명
경기 결과 저장 Match, Match_Result 누가 이겼는지를 기록
선수 통계 관리 Player, Player_Stats 개인 퍼포먼스 저장
리그 순위 계산 Team, Team_Standing 시즌 누적 승점 계산

 

똑같은 “스포츠 경기”를 다뤄도, DB의 목적이 다르면 테이블 구조도 전혀 달라짐.

 


💬 한마디 요약

DB의 목적을 명확히 한다“는 건

내가 이 DB로 뭘 알고 싶은지, 뭘 관리하고 싶은지 정확히 결정하고 나서 설계하라는 뜻임.”


 

이번에는 “목적이 불명확한 DB의 예”와 그로 인한 문제점은 무엇일까?

현업에서도 이런 DB 구조를 많이 만나게 되고, 결국은 유지보수 지옥🔥이 되기 쉽습니다.

 

📌 목적이 불명확한 DB의 예

⚠️ 예시: 스포츠 경기 DB인데… 전부 한 테이블에?

TABLE GAME_INFO (
  TEAM_NAME,
  PLAYER_NAME,
  SCORE,
  POSITION,
  GAME_DATE,
  WIN_YN,
  LEAGUE_NAME,
  COACH_NAME,
  TEAM_RANK,
  PLAYER_HEIGHT,
  STADIUM_NAME
)

 


❌ 이게 왜 문제냐면?

1. 무슨 목적의 DB인지 알 수 없음

  • 이 테이블은 경기 결과를 저장하려는 건지,팀 통계를 관리하려는 건지 모호함
  • 선수 정보를 저장하려는 건지,

👉 설계자가 아닌 이상 “이 컬럼은 뭘 위한 걸까?” 계속 헷갈림

 


2. 단일 책임 원칙 위배

  • 한 테이블에 선수 정보, 팀 정보, 경기 결과, 경기장 정보가 다 섞여 있음
  • 즉, 이 테이블은 한 가지 목적이 아니라 여러 목적이 섞인 “잡탕 구조”

👉 수정할 때마다 여러 책임이 얽혀 있어 버그 발생 가능성 UP


 

3. 데이터 중복 및 무결성 문제

  • 팀 이름이 매 경기마다 반복 저장됨 → 중복
  • 선수 키(PLAYER_HEIGHT)가 경기마다 다를 수 있음 → 모순
  • 코치 이름 바꾸려면 여러 행 다 수정해야 함 → 유지보수 지옥

 

4. 질문에 답하기 어려움

  • 예: “김철수 선수의 시즌 총 골 수는?”
  • → 정규화 안 된 구조에선 골 찾기도 어렵고, 신뢰도도 낮음

✅ 같은 사례, 목적이 명확한 구조로 바꾸면?

목적 테이블
선수 관리 PLAYER (player_id, name, height, position, team_id)
팀 정보 TEAM (team_id, team_name, coach_name)
경기 정보 MATCH (match_id, date, stadium, home_team_id, away_team_id)
기록 PLAYER_STATS (match_id, player_id, score, assist, foul)

 

 

👉 이제는 “목적별 테이블이 명확히 분리”되어 있어서 수정도 쉽고, 통계도 정확하게 낼 수 있음.


 

🔚 요약

항목 불명확한 DB 명확한 DB
목적 여러 기능이 뒤섞임 하나의 목적에 맞는 테이블
구조 중복되고 모순될 수 있음 정규화로 일관된 구조
유지보수 어렵고 위험함 유연하고 안정적
쿼리 비효율적이고 모호함 명확하고 빠름

💬 한마디 정리

DB 목적이 불명확하면:

  • 테이블은 비대해지고
  • 데이터는 중복되고
  • 유지보수는 고통이 되고
  • 아무도 그 DB를 쓰고 싶어 하지 않게 됨. 😥

+ Recent posts