Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Team 20] DB 설계 #6

Open
wants to merge 6 commits into
base: team-20
Choose a base branch
from

Conversation

jihye-woo
Copy link
Collaborator

안녕하세요! 우디입니다😃

사실 코드는.. 거의 작성하지 못했지만 테이블에 대한 리뷰를 받고싶어서 PR을 요청드리게 되었습니다!
DB 설계가 쉽지 않네요ㅠㅠ 부족한 점이 많지만 리뷰 잘 부탁드리겠습니다...!⭐️


설계한 DB 테이블

  • 어휴.. 그림으로 보니까 너무 못생겼네요..😂 마음껏 리뷰해주세요ㅠㅠ

Screen Shot 2021-05-07 at 2 25 03 AM


테이블 설명

⚾️ 게임 관련 테이블

  • 테이블 간 관계
 game : player_score = 1 : N
 game : inning = 1 : N
 inning : play_history = 1 : N
 play_history : play = 1 : N

1. game

  • 게임 대진표 정보
  • 모든 유저에게 동일한 대진표 정보를 제공하기 위해서 클라이언트가 아닌 서버에서 대진표 정보를 들고 있는 편이 좋을 것 같았습니다!
  • (그래서 처음부터 게임 테이블에는 대진표 정보들을 미리 넣어둘 계획입니다)

2. inning

  • 회차 전반 혹은 후반에 대한 정보
    • 몇 번 회차인지(inning_number), 전반인지 후반인지(inning_half)
    • 점수(score)
    • 현재 회차의 out 횟수

😂 사실 inning 테이블의 out 속성 부분이 아직 고민입니다. 이렇게 inning 내부에 out 속성을 넣게되면, 한 선수가 out 할 때마다 해당 inning 데이터에 update 요청을 해야하고, 한 선수의 플레이가 끝날 때마다 결국 최종적으로 저장되는 out 카운트는 항상 3이 되어버립니다ㅠㅠ
차라리 한 선수의 턴이 끝났을 때 저장되는 play_history 테이블 내부에 out에 대한 속성을 추가하는게 좋을까요..?👀

(ex) play_history 에 저장될 데이터 (out 속성 추가할 경우)
- 선수 1 | 안타 | out = 0
- 선수 2 | 아웃 | out = 1
- 선수 3 | 안타 | out = 1

3. play

  • 투수가 공을 던질 때마다 생성되는 플레이 정보
  • 스트라이크 혹은 볼인지

4. play_history

  • 한 선수의 플레이가 진행되는 동안 일어나는 경기 정보
  • 1루-3루(base_one ~ base_three)에 어떤 선수들이 위치해있는지에 대한 정보들이 저장

(+) ? 중계 영역이란

  • 아래와 같이 투수가 공을 던질 때마다 발생하는 플레이 이력들을 선수별로 나누어서 나열한 영역
  • todolist 프로젝트에서 히스토리 영역과 비슷한 느낌으로 이해했습니다.

Screen Shot 2021-05-07 at 2 06 56 AM

⚾️ 팀 관련 테이블

  • 테이블 간 관계
team : player = 1 : N
player : player_score = 1 : N

1. team

  • 팀 이름

2. player

  • 선수에 대한 기본 정보들
  • 해당 선수가 투수인지에 대한 정보(is_pitcher)

3. player_score

  • 각 경기마다 선수들이 가지는 타석, 안타, 아웃, 볼넷(four_balls) 정보들

⚾️ 유저 관련 테이블

  • 테이블 간 관계
user : user_selected = 1 : 1

1. user

  • 유저에 관한 기본적인 정보들

2. user_selected

  • 유저가 선택한 팀 정보

😂 사실 이 부분도 아직까지 고민입니다...! 처음에는 user 테이블에 하나의 속성으로 추가해주려했지만, 유저가 팀을 선택하기 전에는 속성 값이 계속 null로 처리가 되어있을 것 같아서 테이블로 빼주었습니다ㅠㅠ 그냥 user 테이블에 '유저가 선택한 팀 정보'에 대한 속성을 추가해주어도 상관없을까요?👀 어느 방법이 맞는지 잘 모르겠습니다.. 흛


DB 설계 뿐만 아니라 제가 설계한 DB를 설명하는 것도 쉬운 일이 아니네요ㅠㅠ
설명이 매우 부족하긴 하지만.. 끝까지 읽어주셔서 감사합니다..!

jjunyjjuny and others added 6 commits May 3, 2021 15:45
- 스프링 부트 기본 프로젝트 셋업
  - java 8 / jdk 1.8
  - gradle
  - 의존성 : spring web, mysql, spring data jdbc
- 임시로 local 서버의 mysql을 데이터 소스로 설정
- 이후 배포 서버의 mysql과 연동할 예정
- 설계한 DB 모델 문서를 /resources/static 아래 위치
  - baseball_model_1.mwb (workbench 모델 파일)
  - baseball_model_1.png (모델 캡쳐 사진 파일)
- 설계한 DB 모델 문서를 /resources/static 아래 위치
  - baseball_model.mwb 수정 (workbench 모델 파일)
  - baseball_model.png 업로드 (모델 캡쳐 사진 파일)
- macOS에 의존적인 ../.DS_Store 경로는 버전 관리를 하지 않음
@jihye-woo jihye-woo changed the title [Team 20] Woody DB 설계 [Team 20] DB 설계 May 6, 2021
@wheejuni wheejuni self-assigned this May 7, 2021
@wheejuni wheejuni self-requested a review May 7, 2021 00:50
@wheejuni
Copy link

wheejuni commented May 7, 2021

@jihye-woo 코드 레벨에선 리뷰드릴 부분이 없군요. 테이블만 보도록 하겠습니다.
(마땅한 인라인 코멘트 거리가 없어 그냥 여기에 다는 점 이해 부탁드릴게요.)


Game 테이블

심플하게 게임 ID, 홈/원정 팀 정보 담고 있군요. 좋아 보입니다. 👍

Play, Player_Score 테이블

야구의 기본 원칙에서 출발해보면 어떨까 싶은데요, 투수가 공을 던지기 전 까지 그 어떠한 일도 일어나지 않습니다.
극단적으로 보자면 야구란 스포츠에서 일어나는 모든 행위는 투수의 투구 하나 하나가 불러온 나비효과에 불과할 수도 있습니다.
야구 경기에서 해설위원이나 캐스터가 제 3구, 5구째 맞습니다 와 같은 멘트를 힘을 주어 얘기하는 게 이유가 없는 게 아닙니다.
(우디는 야구를 즐겨 보지 않으니 공감이 안되실 수도 있지만)

image

위 사진을 참고해볼까요. 컬러 화면 오른편의 작은 정수 영역들을 봐 주세요.
S, B, O는 각각 Strike, Ball, Out일 겁니다. H, E, FC는 생소하죠? Hit, Error, Fielders' Choice인데 FC와 E는 이번 프로젝트에서 구현하지 않아도 될 것 같고, H만 고려하면 되겠군요.

결국 투수가 던진 공은 네 개 중 하나의 결과를 갖습니다. S, B, O, H..

Play_history 테이블

공 하나하나에 대해 누가 던져서(투수) 누가 쳤고(타자), 어떤 결과가 (S, B, O, H 중 하나) 일어났는지가 기록되면 Play_history 자체는 기록이 될 필요가 없을 겁니다.

누상에 누가 출루됐는지를 관리하는 피쳐에 대해 생각해보죠. 생각해보면 야구 경기는 매 이닝이 끝날 때마다 루 상의 주자는 다 집에 가거나 죽습니다. 그렇다면 이 피쳐는 Inning 에서 관리하는 것이 적절해 보입니다.

그렇다면

이렇게 구성해보면 어떨까 싶습니다.

Game -> Inning -> Pitch

의 기본 구조를 갖고, Pitch가 가질 결과에 따라 다음 액션이 정의되는 방식으로 테이블 설계를 해 보면 어떨까요?
일단 제가 생각하는 방향을 제시해 드렸는데요, 우디가 조금 더 설계를 보강 혹은 수정하셔서, 더 같이 고민해보면 좋을 것 같아요.
코멘트 기다리겠습니다. 🥇

kyupid pushed a commit that referenced this pull request May 11, 2021
kyupid pushed a commit that referenced this pull request May 11, 2021
Cocoapods Alamofire install
kyupid pushed a commit that referenced this pull request May 11, 2021
GameViewModel & GameListViewModel 작성 및 Network 추가
wheejuni pushed a commit that referenced this pull request May 11, 2021
response에 사용될 공통 형식인 ApiResult 클래스 생성
wheejuni pushed a commit that referenced this pull request May 11, 2021
…ublic

1. acquireAttackTeam, acuqireDefenseTeam, acqurireCurrentInning() 메소드의 접근제어자를 public으로 변경
2. team id와 등번호로 BattingHistory를 반환해주는 메소드 추가
wheejuni pushed a commit that referenced this pull request May 11, 2021
wheejuni pushed a commit that referenced this pull request May 11, 2021
wheejuni pushed a commit that referenced this pull request May 11, 2021
투구 기록을 담을 DTO 생성
wheejuni pushed a commit that referenced this pull request May 11, 2021
게임 메인화면을 업데이트하기 위한 리스폰스 DTO입니다.
wheejuni pushed a commit that referenced this pull request May 11, 2021
1. 야구 게임방의 서비스 레이어입니다.
2. 게임 만들기, 게임 참가하기, 게임진행하기, 게임결과받기 의 기본기능이 있습니다.
wheejuni pushed a commit that referenced this pull request May 11, 2021
인증과정과 Request param을 받는 걸 생략한 game관련 contoroller입니다. (추후 추가 예정)
wheejuni pushed a commit that referenced this pull request May 11, 2021
wheejuni pushed a commit that referenced this pull request May 11, 2021
변경된 테이블에 맞게 PitchHistory에 strikeCount, ballCount 추가
wheejuni pushed a commit that referenced this pull request May 11, 2021
pitchHistory 기록할 때, 당시의 투구상황을 기록하도록 수정했습니다.
wheejuni pushed a commit that referenced this pull request May 11, 2021
PitchHistoryDTO에 투구 당시의 스트라이크, 볼 카운트와 투수, 타자 정보 등을 추가로 담도록 수정
wheejuni pushed a commit that referenced this pull request May 11, 2021
안타를 친상황에서 PitchHistory를 BALL로 기록하고 있었습니다.
wheejuni pushed a commit that referenced this pull request May 11, 2021
wheejuni pushed a commit that referenced this pull request May 11, 2021
1. Team 객체에서 uniform_number를 key로, Player를 value로 하는 Map을 들고 있습니다.
2. Player는 aggregate root인 Team을 통해서만 접근할 수 있기 때문에, Player 내부에 uniform_number는 필요 없습니다.
3. Player가 uniform_number를 갖고 있으면, spring data jdbc가 쿼리문을 생성할때 uniform_number 칼럼을 중복하여 호출합니다.
wheejuni pushed a commit that referenced this pull request May 11, 2021
게임방 목록을 보여주기 위하여 각 테이블을 조인하는 커스텀 쿼리 작성
wheejuni pushed a commit that referenced this pull request May 11, 2021
wheejuni pushed a commit that referenced this pull request May 11, 2021
…ivate

정적 팩토리 메소드 패턴을 위해서 builder의 접근제어자를 private으로 변경
wheejuni pushed a commit that referenced this pull request May 11, 2021
1. sendBatterOnPlate 메소드로 타석에 타자를 올리면 타자의 타석 수도 올려줍니다.
2. 게임 첫시작이나 다음이닝 변경 시, sendBatterOnPlate 없이 this.batterUniformNumber만 바꿔주고 있어서 타석 수가 올라가지 않고 있었습니다.
wheejuni pushed a commit that referenced this pull request May 11, 2021
wheejuni pushed a commit that referenced this pull request May 11, 2021
wheejuni pushed a commit that referenced this pull request May 11, 2021
wheejuni pushed a commit that referenced this pull request May 11, 2021
현재 게임 기록 (스코어, 타율) 을 반환해주는 API 구현
wheejuni pushed a commit that referenced this pull request May 11, 2021
1. 현재 만든 API 요청을 json body로 읽기위한 request DTO 생성했습니다.
2. GameController에서 json body를 읽도록 수정
sphilee pushed a commit that referenced this pull request May 12, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
- 라우트 적용
- 게임 컴포넌트 > 게임 헤더 부분 뷰 작업 완료
- 공통 적용할 수 있는 퍼블리싱 스펙을 theme.js에 정리
- 공통 적용할 수 있는 스타일 컴포넌트를 CommonStyles.jsx에 정리
sphilee pushed a commit that referenced this pull request May 12, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
- PopupButton animation
- Fix PopupButton Hover
- Add Attack team tag
- Add Player tag
- Fix background z-index
ghis22130 added a commit that referenced this pull request May 14, 2021
ehgud0670 pushed a commit that referenced this pull request May 14, 2021
ehgud0670 pushed a commit that referenced this pull request May 14, 2021
crongro pushed a commit that referenced this pull request May 18, 2021
* chore: 프로젝트 초기화 설정

* add: cra | close min27604/baseball/#1

* feat: 시작 화면, 게임 화면 라우팅 처리
- min27604/baseball/#6

* add: 첫 화면에 필요한 컴포넌트 생성
- min27604/baseball/#2
- 게임 리스트 렌더링 하는 데에 에러 있음

* feat: 게임첫화면  mockData임시설정

min27604/baseball/#2

* style: 게임 진행화면 (수비) UI 구성중

- Component 4곳 구성
- Score, CurrentPlayer, Stadium, LogList Cmponent 생성
- Score, CurrentPlayer 구조완성
- min27604/basball/#11

* feat: Stadium 야구장 사진 입력

- img -> backgroundimg로 변경
- min27604/baseball/#11

* feat: Stadium UI 구성 및 rLogList 구조 설계

- Stadium component 내부 구조 설계 및 CSS 작업
- LogList component 폴더 구조 후 상세 작업 진행중
- min27604/baseball/#11

* feat: 시작 화면에 게임 목록 표시

- min27604/baseball/#45

* style: 게임 목록 스타일 수정

- min27604/baseball/#10
- 게임 목록에 3개씩 보이도록 수정
- 기타 자잘한 border-radius, font-size 등 수정

* style: 게임 목록 텍스트 정렬 수정

- min27604/baseball/#10
- vs가 가운데에 고정되도록 홈팀은 오른쪽 정렬 시킴

* feat: 팀 선점 여부에 따라 메시지 다르게 렌더링 (진행중)

- min27604/baseball/#10
- 게임 목록에 경기 번호 추가 (MatchNumber 스타일드 컴포넌트))
- useContext를 사용해보는 중

* refactor: Team 컴포넌트 분리

- min27604/baseball/#10
- Styled component였던 Team 컴포넌트를 일반 컴포넌트로 분리

* feat: 팀 선점 여부에 따라 메시지 다르게 렌더링 (구조 바꿀 예정)

- min27604/baseball/#10
- 서버와 통신하는 방법을 변경하기로 해서 현재까지 진행한 것 일단 타미와 합치기 위해 푸시

* fix: theme 적용 오류 해결

* feature: LogList UI 생성

- min27604/baseball/#11

* feat: Stadium에 ContextAPI 적용한 PlayBoard data 적용

- min27604/baseball/#15

* feat: Stadium S,B,O점수판 PITCH 이벤트 작성

- min27604/baseball/#15

* context 상태 정의를 App.jsx 안으로 수정, 로컬에서 mock data로 통신, axios 설치 (#16)

* refactor: startScreen 디렉토리 생성

- min27604/baseball/#10

* fix: 디렉토리 생성에 따른 경로 수정

- min27604/baseball/#10

* refactor: context.jsx 파일 분리 및 App단으로 변경

- min27604/baseball/#10

* add: localhost로 fetch 보내는 로직 추가, context를 일단 다시 App으로 넣음

- min27604/baseball/#10
- context를 App에 다시 넣은 이유는, setState 로직이 필요한데 useState를 컴포넌트 안에서만 사용할 수 있어서이다. 나중에 costom hook으로 만들 수 있겠다는 조언을 들었다.
- public directory 아래에 json 파일을 만들어 목데이터를 받아왔다.

* refactor: boardHistory 시 코드 개선

- Stadium의 PlayPitch 수정
- Stadium의 PlayBoardTemp 수정
- min27604/baseball/#15

* fix: command not found 오류 해결 중

* feat: reducer 폴더 생성 및 ballReducer 분리

- min27604/baseball/#15

* feat: 유저의 팀이 홈팀인지 여부에 따라 Score 부분에 Player 렌더링

- min27604/baseball/#15
- API 구조 변경에 따라 수정 필요

* feat: Stadium PITCH 이벤트 추가 기능

- Strike==3 or Ball==4 일 때 아웃과 안타 동작
- min27604/baseball/#15

* chore: API 변경에 따른 수정

* refactor: PlayPitch 사용 오류 해결

- PITCH 클릭시 LogList - LogLine 렌더링
- Stadium: 변환시킨 ballCnt를 조건문으로 사용하기 위해선 useEffect를 사용해야 함
- min27604/baseball/#15

* feat: LogList CSS 일부 수정

- min27604/baseball/#15

* feat: inning board 뷰 업데이트 기능 만드는 중

* chore: 포트 번호 수정

* refactor: LComponent명 및 폴더명 변경

- LogPitcher -> LogHitter
- ContextB -> Context
- min27604/baseball/#15

* feat: PlayScreen- H(안타)확률&LogList 멘트 추가

- min27604/baseball/#15

* fix: API 요청 주소 변경

* chore: console.log 삭제

* feat: PlayScreen- H(안타) 확률 추가 , LogList 일부 수정

- min27604/baseball/#15

* feat: 게임 화면의 양 팀 이름을 서버에서 받아온 데이터를 이용해 표시

- min27604/baseball/#15
- DD가 올려준 글에서 나타난 문제 (같은 함수 안에서는 setState가 바로 반영이 안되는 것) 때문에 상태 세팅하는 작업을 PlayScreen으로 옮김

* feat: 현재 투수 이름 표시 (아직 공수교대 시 바뀌는 것까지는 안 된 상태)

- min27604/baseball/#15

* feat: PlayScreen/LogList 에서 안타/아웃 시 현재 타자의 hit,out증가시키기

- LogList: 한박자 느린 Hitter변경, 현재 타자정보 변경 로직 미구현
- min27604/baseball/#15

* fix: 현재 투수표시- inning top이면 홈팀 투수, 아니면 원정팀 투수

- min27604/baseball/#15
- 기존에 isHome과 myTeam / counterTeam 으로 4가지 경우로 처리하던 것을 homeTeam, awayTeam을 이용하는 것으로  수정

* feat: PlayScreen-LogList 안타와 아웃시 totalOutCount++, CurrHitter 변경, 해당선수의 hit 변경 임시 성공

- min27604/baseball/#15

* chore: 오타 수정

* chore: S, B, H 나오는 확률 수정

* fix: 이닝, 초, 말 바꿔주는 로직 수정

- min27604/baseball/#15

* feat: LogList에 타자이름넣기

- min27604/baseball/#15

* feat: 현재 라운드 정보 표시 (회초, 회말, 공수)

- min27604/baseball/#15

* feat: LogList 일부 수정 그러나 미완성

- LogList는 현재 H(타자가 안타를 바로 칠 경우)를 잡지 못함(B4개 ok),  (O도 S3개 count해서 잡음)
- Stadium에서 S가 3번째 되었을 때 setTimeout으로 한번 보여주고 -> O으로 변경한게 문제로 보임

-min27604/baseball/#15

Co-authored-by: Sally Oh <[email protected]>
Co-authored-by: ink-0 <[email protected]>
ksundong pushed a commit that referenced this pull request May 19, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants