mysql - 使用图像表模式进行民意调查?
问题描述
我正在尝试创建一个可能有图像并且可能根本没有图像的投票应用程序。如果它确实有图像,那么它可以有很多或只有一个。例如,每个选项可能有一个图像,或者所有选项可能只有一个图像。这是我想要创建的一个很好的例子: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
和另一个选择说Audi
。vote_count
是每个问题的票数。例如,我们可以有 25 票给宝马,25 票给奥迪(因此问题表中有 50 个 total_votes。)
在voting_history
中,choice_id
告诉我们用户选择了哪个选项,并user_id
告诉我们它是哪个用户。date
是进行投票的时间。
其中Images
,question_id
是图片属于哪个问题,是问题的img
图片网址。为了更好地理解这个表,这里有一个示例民意调查:
标题是罗纳尔多vs梅西,没有描述,total_votes是50,有2个选项,有2张图片。这些图像将存储在Images
表中。我们将为每个图像设置一行。现在假设我们有这个民意调查:
Images
对于这个问题,我们在表格中只有一张图片。这是构建这样的表模式的好方法吗?它有效率吗?
解决方案
假设我们只有一张图像,那么第一个选择将有一张图像,但其余图像在图像表中将没有任何行。如果我们有 2 个选项并且有 2 个图像,那么每个选项都会有一个图像。
这是不一致的秘诀。在 Ronaldo/Messi 示例中,您可能希望确保图像与按钮/选择匹配,而不是依赖代理键(?)的顺序来实现。这表明有一个从图像到选择的外键,而不是问题。
对于第二个示例,图像与任何特定选择无关,而是与问题本身有关。这建议为此类图像使用单独的表格。
推荐阅读
- swift - Swift - 如何弹出到根 ViewController 并执行操作
- asp.net - ASP.net 发布项目启动缓慢
- javascript - 如何使用 Tampermonkey 操作 JWPLAYER?
- docker - docker-compose 中的 Gitlab-runner 无法连接 http://docker:2375/v1.40/info
- c# - 从范围“”引用的“MyClass”类型的变量“c”,但未定义
- scala - Spark Dataframe,如何根据距离阈值过滤 GPS 行
- python - 如何根据其他列中的值从 Pandas 数据框中查找重复项?
- vb.net - 如何使用 vb.net 查询密钥的注册表权限
- azure-devops - 如何在 azureDevops 中添加自定义管道
- pyspark - 当 PySpark 将 Hive 表读取到 pandas 时,Apache Arrow OutOfMemoryException