Google app engine 如何组织应用数据库中的数据?

Google app engine 如何组织应用数据库中的数据?,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我的应用程序应该包含问题列表+用户答案。我应该如何组织数据库: question1 question2 question2 ... questionN user_id_1 yes no yes ... yes user_id_2 no no yes ... no ... user_id_N y

我的应用程序应该包含问题列表+用户答案。我应该如何组织数据库:

             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。另一个表应该是什么样的(因为列的数量不是固定的)?或者,我应该再有两张桌子吗

稍后我还需要:

  • 计算有多少用户对问题n回答“是”
  • 有多少*user_id_N*的朋友(另一个表或json数据)对问题N回答“是”

  • 我应该查询每个数据库以获取这些数字,还是应该在每次用户回答时都有单独的数据库并在那里保留计数器(看起来只有第1项可能,因为朋友列表可以随时更改)。

    如果您只存储回答的内容,您应该能够使用3个表来实现这一点。一个用于您的问题,一对多的表中包含答案,然后另一个表用于用户,一对多的表中包含他们提供的答案。

    如果您只存储所回答的内容,您应该能够使用3个表来存储。一个用于你的问题,一对多表用于答案,然后另一个表用于用户,一对多表用于他们提供的答案。

    使用单独的表来跟踪问题本身可能是一个好主意。顺便说一句,如果您不是简单地为它省略一个标题,那么您的用户ID列表本身应该是应答表中的一个特定列。不过,使用一个单独的表来记录谁是谁的朋友可能是个好主意

    此外,虽然我没有访问GAE数据存储的经验,但至少使用SQL在一列中统计特定答案是相当简单的<代码>从AnswerTable中选择COUNT(questionN),其中questionN='yes'将用作SQL查询


    请注意,如果您按照Limey的建议进行设计,那么等效的SQL查询更像是
    从AnswerTable中选择COUNT(answer),其中questionID='questionN'和answer='yes'
    使用单独的表跟踪问题本身可能是一个好主意。顺便说一句,如果您不是简单地为它省略一个标题,那么您的用户ID列表本身应该是应答表中的一个特定列。不过,使用一个单独的表来记录谁是谁的朋友可能是个好主意

    此外,虽然我没有访问GAE数据存储的经验,但至少使用SQL在一列中统计特定答案是相当简单的<代码>从AnswerTable中选择COUNT(questionN),其中questionN='yes'将用作SQL查询


    请注意,如果您按照Limey的建议进行设计,那么等效的SQL查询将更像是
    从AnswerTable中选择COUNT(answer),其中questionID='questionN'和answer='yes'
    ,实现这一点的标准方法是将每个答案存储为一个单独的实体-概念上与您描述的相同,但不需要在添加新问题时修改结构。下面是实现这一点的一组模型定义示例:

    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)
    

    这样做的标准方法是将每个答案存储为一个单独的实体-概念上与您描述的相同,但不需要在添加新问题时修改结构。下面是实现这一点的一组模型定义示例:

    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的主键)。我想你应该查阅数据库设计简介,阅读第三级规范化。你能给我提供“数据库设计简介”的链接吗?看!谷歌的力量!