2011-09-10 5 views
0

이것은 내가 달성하고자하는 것입니다. 나는 50 개의 다른 직업을 가지고있다 (군인, 마법사, 스님 등).작업 컬렉션을 구현하는 가장 좋은 알고리즘은 무엇입니까?

각 사용자는 퀘스트를 완료 할 때마다 무작위로 카드를 얻는다. 그래서 특정 시점에 병사와 스님을 가질 수 있지만 마법사는 사라집니다. 그 는 컬렉션이 같은 카드를 얻을 수 있습니다 언제든지

 
Soldier Yes 
Mage  No 
Monk  Yes 

모양을 의미한다 (당신이 10 명 병사를 가질 수 있지만, 컬렉션에만 예 또는 아니요)은 삭제할 수 있습니다 언제든지

작업. 당신이 군인을 삭제하는 경우가 발견되면 제가 지금 군인이없는 경우에도하지만 당신은 "수집"작업을 계속 따라서 컬렉션이

 
Soldier Yes 
Mage  No 
Monk  Yes 

처럼 보일 것입니다. 나는 이미 그 직업을 "모았다".

MySQL과 PHP에서 이것을 구현하는 가장 좋은 방법이 무엇인지 생각하고 있었습니까?

지금 아이디어는 2 입니다. 1. 새 테이블 컬렉션을 만들고 얻은 각 작업에 대해 하나의 레코드를 유지하십시오. 2. 분리 기호로 파이프가있는 필드 하나만 작성하고 결과를 내삽/폭발하십시오.

+0

귀하의 질문의 90 %와 관련이 (그리고 내가 놓친 http://apps.facebook.com/talesofm/jobs처럼 보인다 포인트) 또는 SQL에서 many-to-many 관계를 수행하는 방법에 대해서만 묻는 것인가? –

답변

0

왜 단일 비트 마스크 열을 사용하지 않습니까?

Soldier = 1, Mage = 2, Monk = 4.

따라서 마법사와 스님 만있는 경우 값은 2 | 4 = 6이됩니다.

이렇게하면 나중에 스키마를 변경하지 않고도 쉽게 다른 클래스를 추가 할 수 있습니다.

0

중요한 성능 문제가있는 경우가 아니면 별도의 테이블을 사용해도됩니다. 필요한 경우 나중에 속성을 추가 할 수있는 추가 이점이 있습니다 (예 : 초급/마스터, 경험치 등). 비트 마스크를 사용하는 것은 유연하지 않으므로 나중에 추악한 DB 체계로 끝날 수 있습니다. 또한 사용자를 대상으로 빠른 조회를 수행 할 수 없습니다 (예 : 병사 및 스님 작업이있는 모든 사용자가 필요한 경우).

0

내 테이블에 "deleted"라는 필드를 추가했습니다. 0 == 존재, 1 == 삭제 그런 식으로 게임의 모든 카드에 대한 이야기를들을 수 있습니다. 하지만 몇 줄을 추가 할 수도 있습니다.

당신은 어떻게 생각하십니까?

그것은 (당신이 직업을 가지고 있다면, 그것은 색깔이 될 것입니다 당신이 그것을 가지고 있지 않다면, 흑백 예정)

관련 문제