2013-05-10 4 views
0

클라이언트가 "연극"을 만들기 위해 연결할 수있는 카드 게임용 자바 기반 서버를 만들고 있습니다. 각 "게임"(Java 클래스)은 104 개의 카드로 된 데크 (보통 데크 두 번)를 가지고 있습니다. 그래서 기본 클래스는 게임, 데크, 카드입니다. 게임에는 하나의 덱이 있고 덱에는 최대 104 개의 카드가 있습니다. 나는 Hibernate와 PostgreSQL 데이터베이스로 서버를위한 기본 구조를 만들었다. 내 문제는 여기에 데이터베이스를 모델링하는 방법입니다.카드 및 데크로 게임을위한 데이터베이스를 설계하는 방법

52 개의 다른 카드가 있기 때문에 에 52 개의 카드를 각각 만들 수 없습니다. "덱"표에있는 덱. 그러나 데크는 셔플해야합니다. 이 작업을 수행하는 현명한 방법이 있다고 생각하지만 데이터베이스 모델링은 내게 적합하지 않습니다.

내 머리 꼭대기에는 52 개의 행이있는 하나의 테이블 "카드"를 가질 수 있다고 상상해 보았습니다. 그런 다음 게임이 생성 될 때마다 행을 생성하고 카드 테이블에서 각 카드의 ID를 두 번 참조하는 숫자 목록 (104 개 숫자)을 보유하고있는 다른 테이블 "갑판". 그것도 좋은 생각처럼 들리니? 그리고 Java와 Hibernate로 어떻게 이것을 할 수 있습니까?

아니면 다른 방법이 있습니까? 많은 카드 게임이 있기 때문에, 나는 이것이 전에 수 백만 번 행해졌다고 생각합니다. 그리고 이것을 해결하는 몇 가지 모범 사례가 있지만 그것을 찾을 수 없었습니다. 문제에 대한 의견을 보내 주시면 감사하겠습니다. 미리 감사드립니다!

EDIT : 문제가 너무 과장되어 있고 Hibernate를 사용하여 데이터베이스에 Deck을 삽입하고 데이터베이스가 나머지 부분을 처리하도록해야합니까?

답변

0

데이터베이스에 카드를 저장하는 데 필요한 부분이 보이지 않는다면 너무 복잡해집니다. 내가하려는 것은 CardDistribution과 같은 Java 응용 프로그램에 102 개의 요소 배열을 포함하는 다른 클래스를 만드는 것입니다. 각 요소에 보유한 카드의 ID를 제공하십시오.

게임을 저장하려면 CardDistribution 객체를 JSON으로 serialize하고 게임 테이블의 열에 유지하십시오.

데이터베이스에서 읽을 때 CardDistribution JSON을 자바 객체로 직렬화 해제하고 사용합니다.

0

일반적으로 RDBMS에 관한 한 가지 중요한 점은 (그리고 기본적으로 모든 JPA 제공자가 그렇지 않을 경우 불평 할 것입니다.) 일반적으로 테이블에 대해 일종의 고유 키를 갖고 싶다는 것입니다. 기둥).
또한 SQL에는 명시 적으로 요청 된 순서가없는 경우 반환되는 행이 '임의'로 표시됩니다 (옵티마이 저가 모든 바로 가기를 사용할 수 있으므로 순서가 예기치 않게 변경 될 수 있음)라는 '보장'이 있습니다.

Deck 
----------------- 
gameId -- fk reference to Game.id 
cardId -- fk reference to Card.id 
deckOrder -- order of card in deck for this game 

전체 행이 고유 키을 포함한다 : 염두에두고

Deck 아마 가장 좋은 설정입니다.

행을 데크에 추가하는 방법은 배열에 모든 카드를 추가하고 Java로 임의로 정렬하는 것이 가장 쉽고 (올바르게 '임의로') 쉽게 무작위로 주문할 수 있습니다.