0

我正在實施一個比賽系統,用戶必須在其中選擇多個問題的正確答案。每個星期都有一套新的問題。 我正在嘗試找到將用戶參與存儲在數據庫中的正確方法。現在,我有以下數據模型:如何正常化每週參與與每週問題之間的關聯?

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添加到答案中並沒有幫助。

什麼是正確的方式來表示這些信息?

回答

1

您可以刪除參與表中的Id字段,並使用(UserId,WeekId)作爲參與表的組合/連接主鍵。表中的ParticipationId字段的答案您必須將其替換爲對(UserId,WeekId)作爲對參與表的外鍵引用。如果您的數據庫系統允許,則可以在表中的問題表中引用(Id,WeekId)表中的字段(QuestionId,WeekId)進行定義。也許爲此,您必須在問題表之前定義一對索引(Id,WeekId)。

0

你真的需要將參與與本週關聯嗎?

  • 答案(ID,用戶ID,QuestionId,值)
  • 問題(同上,WeekId,文本)
  • 周(ID,起始日期)
  • :您可以通過提問

    所以得到它

+0

這並不妨礙來自不同周的答案的相同參與。 – 2009-07-30 16:26:14

0

我個人認爲你在這裏有適當的實施。

ParticipationId鏈接到參與者的ID,該參與者與用戶和周密切相關。您的問題表也以WeekId爲鍵。

因此,您一直都有適當的參考。如果不是這種情況,我認爲我們需要查看一些數據