使用图片表格模式进行投票?

时间:2018-06-24 22:35:26

标签: mysql database database-design relational-database

我正在尝试创建一个可能有图像但根本没有图像的民意调查应用程序。如果确实有图像,那么它可以有很多或只有一个。例如,每个选择可能都有一个图像,或者所有选择可能只有一个图像。这是我要创建的一个很好的示例:Opinion Stage

这是我正在考虑的表模式:

Questions //Table of all questions with total votes to avoid querying all user votes
  -id
  -user_id (foreign key to users)
  -title
  -description
  -total_votes
  -date

Choices  //Table of all question choices, each will have vote_count to avoid querying all voting_history each time.
  -id
  -question_id (foreign key to questions)
  -choice
  -vote_count

voting_history //Table that shows which user voted for what.
  -id
  -choice_id (foreign key to choices)
  -user_id (foreign key to users)
  -date

Images  //Table that gives the images for the choices
  -id
  -question_id (foreign key to Questions)
  -img

假设我们只有一个图像,那么第一个选择将有一个图像,但是其余图像在图像表中将没有任何行。如果我们有2个选择并且有2张图片,那么每个选择都会有一张图片。

深入了解每个表中的每一行的作用:Questions中,user_id是代表谁提出问题的字段,title是问题的标题,description是问题的描述。例如,我们可以有一个标题为Which car is better?的描述为:I like both, but I have to go with the BMW. total_votes是问题的总票数,例如,如果可以有50投票,date是问题发布的时间。

Choices表中,question_id告诉我们此选择属于哪个问题,choice为该问题提供选择,使用前面的汽车问题示例,我们可以选择表示BMW,另一种选择表示​​Audivote_count是每个问题的票数。例如,我们对宝马有25票,对奥迪有25票(因此,问题表中有50个total_votes。)

voting_history中,choice_id告诉我们用户选择了哪个选择,而user_id告诉我们用户是哪个用户。 date是进行表决的时间。

Images中,question_id是图像所属的问题,img是问题的图像URL。为了更好地理解该表,下面是一个示例民意调查: enter image description here

标题是Ronaldo vs. Messi,没有描述,total_votes是50,有2个选择,并且有2张图像。这些图像将存储在Images表中。每个图像都有一行。现在让我们说一下这项民意调查: enter image description here

Images表中,只有1张图片用于此问题。这是构建这样的表架构的好方法吗?有效率吗?

1 个答案:

答案 0 :(得分:0)

  

假设我们只有一个图像,那么第一个选择将有一个图像,但是其余图像在图像表中将没有任何行。如果我们有2个选择并且有2张图片,那么每个选择都会有一张图片。

这是导致不一致的秘诀。在Ronaldo / Messi示例中,您可能要确保图像与按钮/选择匹配,而不要依赖代理键(?)的顺序来实现。这表明从图像到选项而不是问题要有外键。

对于第二个示例,图像与任何特定选择均不相关,但与问题本身相关。这建议为这些图像提供单独的表格。