我正在尝试创建一个可能有图像但根本没有图像的民意调查应用程序。如果确实有图像,那么它可以有很多或只有一个。例如,每个选择可能都有一个图像,或者所有选择可能只有一个图像。这是我要创建的一个很好的示例: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
,另一种选择表示Audi
。 vote_count
是每个问题的票数。例如,我们对宝马有25票,对奥迪有25票(因此,问题表中有50个total_votes。)
在voting_history
中,choice_id
告诉我们用户选择了哪个选择,而user_id
告诉我们用户是哪个用户。 date
是进行表决的时间。
在Images
中,question_id
是图像所属的问题,img
是问题的图像URL。为了更好地理解该表,下面是一个示例民意调查:
标题是Ronaldo vs. Messi,没有描述,total_votes是50,有2个选择,并且有2张图像。这些图像将存储在Images
表中。每个图像都有一行。现在让我们说一下这项民意调查:
在Images
表中,只有1张图片用于此问题。这是构建这样的表架构的好方法吗?有效率吗?
答案 0 :(得分:0)
假设我们只有一个图像,那么第一个选择将有一个图像,但是其余图像在图像表中将没有任何行。如果我们有2个选择并且有2张图片,那么每个选择都会有一张图片。
这是导致不一致的秘诀。在Ronaldo / Messi示例中,您可能要确保图像与按钮/选择匹配,而不要依赖代理键(?)的顺序来实现。这表明从图像到选项而不是问题要有外键。
对于第二个示例,图像与任何特定选择均不相关,但与问题本身相关。这建议为这些图像提供单独的表格。