我试图创建一个投票应用程序,可能有图像,可能没有图像在所有。如果它确实有图像,那么它可以有很多图像,也可以只有一个。例如,每个选项可能有一个图像,或者所有选项可能只有一个图像。这是一个很好的例子,我想创建:意见阶段。
下面是我想到的表模式:
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
假设只有一个图像,那么第一个选择将有一个图像,但是其余的图像在图像表中没有任何行。如果我们有两个选择,并且有两个图像,那么每个选择都有一个图像。
更深入地了解每个表中的每一行的作用:in 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票)
在 voting_history
, choice_id
告诉我们用户选择了哪个选项 user_id
告诉我们是哪个用户。 date
是投票的时间。
在 Images
, question_id
图像属于哪个问题, img
是问题的图像url。为了更好地理解此表,下面是一个示例投票:
标题是罗纳尔多对梅西,没有描述,总票数是50,有2个选择,它有2张图片。这些图像将存储在 Images
table。我们会为每一张图片排一行。现在假设我们有一个民意测验:
我们只有一张照片 Images
此问题的表格。这是构建这样的表模式的好方法吗?效率高吗?
1条答案
按热度按时间nafvub8i1#
假设只有一个图像,那么第一个选择将有一个图像,但是其余的图像在图像表中没有任何行。如果我们有两个选择,并且有两个图像,那么每个选择都有一个图像。
这是一个不一致的配方。在罗纳尔多/梅西的例子中,您可能希望确保图像与按钮/选项匹配,而不是依赖于代理键(?)的排序。这意味着要有一个从图像到选择的外键,而不是问题。
对于第二个例子,图像与任何特定的选择无关,而是与问题本身有关。这就意味着需要一个单独的表格来处理这些图像。