2013-01-23 2 views
1

저는 포커 핸드를 분석하는 C++ 프로그램을 만들려고합니다. SQL을 사용하여 손, 플레이어 및 세션에 대한 데이터를 저장하고 싶습니다.데이터베이스에 포커 핸드 이벤트 저장하기

내 세션과 플레이어 테이블에 저장하려는 항목에 대해 꽤 좋은 아이디어가 있지만 핸드 테이블은 조금 까다 롭습니다.

한 손에는 모든 플레이어의 이름, 손 (표시된 경우), 스택, 날짜, 스테이크 등이 포함되어야합니다. 문제는 이벤트를 저장하는 것입니다. 하나의 6 인용 핸드는 fold-fold-fold-fold-raise처럼 간단하게 4 $ 배가 될 수 있지만, 잠재적으로 훨씬 길어질 수 있습니다.

내가 할 수있는 유일한 방법은 "이벤트"라는 열과 "F-F-F-F-R, 4-F"라는 문자열을 저장하는 것입니다.

나에게 더 나은, 우아한 방법이 있어야합니까?

+1

저에게 이것은 관계형 데이터베이스에 저장하려는 문제가 아니라 NoSQL 데이터베이스에 저장하려고하는 것과 같은 것 같습니다. –

+0

멋진 질문 !! - 첫 번째 생각 (그리고 그것에 대해 더 많이 생각할 것입니다)은'Fold' /'Call' /'Raise'와'Fold'가 가장 일반적인 옵션이기 때문에 그 3 가지 옵션이 있습니다 - Make Fold ='NULL '공간 절약을 위해 Call ='0'과 Raise = $$ amount ...를 다시 설정하십시오. 다시 공간 절약에 대해 생각했습니다. –

+0

다음 생각 - 테이블 당 최대 9 개이므로 각 필드 당 9 개입니다. 플레이어와 딜러가 누구인지 다른 분야의 주에서 ... –

답변

3

시퀀스를 한 행에 저장하는 것은 첫 번째 정규 형식을 위반하며 나쁜 관행으로 간주됩니다.

그래서 이벤트의 전체 시퀀스를 손에 하나의 행에 저장하는 대신 다른 테이블에 일련의 행이 있어야합니다 (John Bustos는 "베팅"을 제안했지만 제안 된 열 이름 "이벤트"는 좋은 테이블 이름도 포함됨). 모든 이벤트는 자신이 속한 핸드의 식별자, 즉 이벤트를 주문하기위한 시퀀스 번호를 포함합니다. 이 두 열은 해당 테이블의 기본 키를 형성합니다. 그런 다음 이벤트의 종류 (ENUM가 유용 할 수 있음)를 저장하는 열과 일부 이벤트의 경우 금액과 같은 추가 데이터를 저장할 수 있습니다.

쿼리의 모든 이벤트를 나열하려면 각 이벤트마다 하나씩 여러 행을 생성 할 수 있습니다. 또는이 모든 행을 텍스트로 변환하는 하위 쿼리가 있습니다.이 하위 쿼리를 GROUP_CONCAT을 사용하여 단일 문자열로 집계 할 수 있습니다.

관련 문제