문제

사용자가 여러 질문의 정답을 선택 해야하는 컨테스트 시스템을 구현하고 있습니다. 매주 새로운 질문이 있습니다. 데이터베이스에 사용자 참여를 저장하는 올바른 방법을 찾으려고 노력하고 있습니다. 지금은 다음과 같은 데이터 모델이 있습니다.

 Participation                     Week
+--------------+                  +--------------+
| Id           |     +----------->| Id           |<-+
| UserId       |     |            | StartDate    |  |
| WeekId       |-----+            +--------------+  |
+--------------+                                    |
                                   Question         |
                                  +--------------+  |
                                  | Id           |  |
                                  | WeekId       |--+
                                  | Text         |
                                  +--------------+

내가 생각해 낸 유일한 해결책은 다음 다이어그램에 표시된 것처럼 질문과 관련된 답변 테이블을 추가하는 것입니다.

    Participation                     Week
   +--------------+                  +--------------+
+->| Id           |     +----------->| Id           |<-+
|  | UserId       |     |            | StartDate    |  |
|  | WeekId       |-----+            +--------------+  |
|  +--------------+                                    |
|                                     Question         |
|       Answer                       +--------------+  |
|      +------------------+    +---->| Id           |  |
+------| ParticipationId  |    |     | WeekId       |--+
       | QuestionId       |----+     | Text         |
       | Value            |          +--------------+
       +------------------+

나는이 솔루션을 연결하지 않습니다. 참여가 다른 주의 질문에 대한 답변을 얻을 수 있기 때문에 매우 좋습니다. Weekid를 답에 추가하는 것은 도움이되지 않습니다.

이 정보를 표현하는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

테이블 참여에서 ID 필드를 제거하고 테이블 참여를 위해 구성/연결 기본 키로 사용 (userID, WeekID)을 사용할 수 있습니다. 테이블의 필드 참여는 테이블 참여에 대한 외국의 주요 참조로 쌍 (userId, WeekID)으로 교체해야합니다. 데이터베이스 시스템이 허용하는 경우 테이블 질문에서 참조 (ID, WeekID)에 대한 테이블 답변에서 필드 (QuestionID, WeekID)를 정의 할 수 있습니다. 어쩌면이를 위해서는 이전에 테이블 질문에서 쌍 (ID, WeekID)의 색인을 정의해야합니다.

다른 팁

참가를 일주일과 연관시켜야합니까? 질문을 통해 얻을 수 있습니다

그래서:

  • 답변 (ID, userID, QuestionID, Value)
  • 질문 (ID, Weekid, Text)
  • 주간 (ID, StartDate)

개인적으로 나는 당신이 여기에 적절한 구현을 가지고 있다고 생각합니다.

참여에 대한 참여는 사용자와 주에 키를 제공하는 참여에 대한 ID에 연결됩니다. 귀하의 질문 테이블은 Weekid와 함께 키가 있습니다.

따라서, 당신은 모두 적절한 참조를 가지고 있습니다. 그렇지 않은 경우 데이터를 볼 필요가 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top