2012-12-08 2 views
1

그래서 우리는 일종의 '논쟁'게임을 만들고 있습니다. 다른 게임 유형, 결투와 그룹 토론 참가자 제한 등이 둘은 논쟁의 길이로 정의 된 규칙의 몇 가지가있다 내가 어떻게하면 확인할 수있다 알아야 할데이터베이스, 테이블 구조, 관계형 디자인하기

debates 
    id 
    title 
    body 
    created 
    modified 

    debate_posts 
     id 
     debate_id 
     body 
     user_id 
     created 
     modified 

debate_participants 
    user_id 
    debate_id 

토론이 시작됩니다 (최소 2 명의 참가자가되어야합니다). 두 번째 사람이 참여할 때 타임 스탬프 나 비슷한 것을 저장해야합니까?

제가 알고 싶은 두 번째 사항은 어떻게하면 승자를 정의 할 수 있을까요? 제 3의 테이블을 가지고 토론의 승자 인 user_id와 debate_id를 정의해야합니까?

질문에 어떤 내용을 추가해야하는지 잘 모르겠지만 제공 할 수있는 것이 있다면 기쁜 마음입니다.

시간이 꺼질 때까지 토론자이 게시물을 할 수있을 것입니다

업데이트 후 사용자/그룹이 승리하는 경우 투표를 다른 사용자가있을 것입니다.

+0

실제로 누가 이겼 는가? 또한 각 수정 사항을 추적하거나 마지막 수정 사항을 추적해야합니까? 현재 구조는 레코드의 마지막 수정 만 허용합니다. 까다로운 메모 : "user_id"를 사용하지만 다른 표에서는 "id"만 사용하십시오. 조인 테이블일까요? 내가 함께 놀고있는 앱에서, 나는 비슷한 구조를 가지고있어서 그 까다 롭던 것들을 넘어서 나에게 좋게 보인다. – Marvo

+0

일부 세부 정보가 업데이트되었습니다. 내 구조만으로 마지막 수정 만 허용한다는 것은 무엇을 의미합니까? – user1831020

+1

제쳐두고, 테이블 이름은 * 단수 *이어야합니다 (또는 더 정확하게는 * 행 *을 나타내야하므로'토론 '대신'토론'). –

답변

2

두 번째 참여자가 토론 시작 시점을 알기 위해 타임 스탬프가 필요하다고 생각합니다. 사용자가 토론 쿼리에 참여할 때마다 debate_participants를 통해 특정 토론에 포함 된 고유 사용자 수를 확인하고 새 토론자가 두 번째 토론자의 시작 타임 스탬프를 설정합니다.

토론이 시작된시기를 알아내는 또 다른 방법은 debate_posts 테이블에서 두 번째 사용자가 토론에서 게시 한 가장 빠른 시간을 찾는 것입니다.

승자를 정의하려면 승자가 한 명 이상인 경우 사용자를 저장할 때마다 가장 중요한 토론 인 winner_id 필드를 추가하면됩니다.

+0

토론 유형에 따라 하나 또는 여러 가지로 다양 할 수 있습니다 승자. – user1831020

+0

우승자가 결정되지 않았다는 표시로 "null"을 사용하기 때문에 개인적으로 토론 테이블에 winner_id 필드를 추가하지 않습니다.나는 일반적으로 nulls를 사용하는 것을 싫어하고 상태를 결정할 때는 덜 사용합니다. 그러나 그것은 개인적인 선택 일 수 있습니다. – Marvo

+0

여러 사용자를 처리하고 현재 누가 누가 우승하는지 업데이트하려면 voter_id 및 voted_for_id (이 필드에 가장 적합한 이름이 확실하지 않음) 필드가있는 투표 테이블을 유지할 수 있습니다. 그런 다음 voted_for_id에 대한 투표 수를 세어 최상위 N으로 제한하여 논쟁에서 상위 N 명의 토론자를 검색 할 수 있습니다. – jbull