我的应用程序应包含问题列表+用户答案。我该如何组织数据库:
question1 question2 question2 ... questionN
user_id_1 yes no yes ... yes
user_id_2 no no yes ... no
...
user_id_N yes yes yes ... yes
看起来我需要创建带问题的单独表格并为每个问题分配ID。另一个表应该如何(因为列数不固定)?或者,我应该再增加两张桌子吗?
稍后我还需要:
我应该每个查询数据库以获取这些数字,还是应该每次用户回答时都有单独的数据库并保留计数器(因为朋友列表可以随时更改,所以只查看项目1)。
答案 0 :(得分:2)
执行此操作的标准方法是将每个答案存储为单独的实体 - 概念上与您描述的相同,但无需在添加新问题时修改结构。以下是实现此目的的一组示例模型定义:
class UserInfo(db.Model):
# Anything you want to store about the user
class Question(db.Model):
text = db.TextProperty(required=True)
# Anything else you want to store about the question
class Answer(db.Model):
user = db.ReferenceProperty(UserInfo, required=True)
question = db.ReferenceProperty(Question, required=True)
answer_text = db.TextProperty(required=True)
答案 1 :(得分:1)
如果您只存储所回答的内容,您应该能够使用3个表格进行存储。一个用于您的问题,一个到多个到一个表的答案,然后另一个表为用户提供一对多的答案。
答案 2 :(得分:1)
使用单独的表来跟踪问题本身可能是一个好主意。顺便说一句,如果您不是简单地为其留下标题,那么您的用户ID列表本身应该是答案表中的特定列。不过,使用单独的表来跟踪谁是谁的朋友可能是个好主意。
此外,虽然我没有访问GAE数据存储的经验,但至少使用SQL在单个列中计算特定答案是相当简单的。 SELECT COUNT(questionN) FROM AnswerTable WHERE questionN='yes'
将是您用作SQL查询的内容。
请注意,如果您使用Limey的设计建议,则等效的SQL查询将更像SELECT COUNT(answer) FROM AnswerTable WHERE questionID='questionN' AND answer='yes'
。