首页 > 解决方案 > 使用图像表模式进行民意调查?

问题描述

我正在尝试创建一个可能有图像并且可能根本没有图像的投票应用程序。如果它确实有图像,那么它可以有很多或只有一个。例如,每个选项可能有一个图像,或者所有选项可能只有一个图像。这是我想要创建的一个很好的例子: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.thetotal_votes是问题的总票数,例如如果可以有 50 票,并且date是发布问题的时间。

Choices表格中,question_id告诉我们这个选项属于哪个问题,choice给出问题的选择,使用我们之前的汽车问题示例,我们可以有一个选择说BMW和另一个选择说Audivote_count是每个问题的票数。例如,我们可以有 25 票给宝马,25 票给奥迪(因此问题表中有 50 个 total_votes。)

voting_history中,choice_id告诉我们用户选择了哪个选项,并user_id告诉我们它是哪个用户。date是进行投票的时间。

其中Imagesquestion_id是图片属于哪个问题,是问题的img图片网址。为了更好地理解这个表,这里有一个示例民意调查: 在此处输入图像描述

标题是罗纳尔多vs梅西,没有描述,total_votes是50,有2个选项,有2张图片。这些图像将存储在Images表中。我们将为每个图像设置一行。现在假设我们有这个民意调查: 在此处输入图像描述

Images对于这个问题,我们在表格中只有一张图片。这是构建这样的表模式的好方法吗?它有效率吗?

标签: mysqldatabasedatabase-designrelational-database

解决方案


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

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

对于第二个示例,图像与任何特定选择无关,而是与问题本身有关。这建议为此类图像使用单独的表格。


推荐阅读