如何针对这种特定情况使用 Google App Engine Datastore 设计实体结构?

How to design entity structures using Google App Engine Datastore for this particular situation?

好的,这是我的需求。我想使用 Google App Engine 数据存储作为后端数据库构建一个网络应用程序。

该应用程序允许用户免费注册一个帐户。当每个注册用户都可以拥有一个储蓄账户时,他们可以在自己的储蓄账户中存取款。

使用本文中的信息 link https://cloud.google.com/appengine/docs/java/datastore/entities

我想到了这些代码

public class RegistrationServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        String email = request.getParameter("email");
        String pass = request.getParameter("pass");

        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();


        Entity user = new Entity("User");
        user.setProperty("name",name);
        user.setProperty("email",email);
        user.setProperty("pass",pass);


        datastore.put(user);
    }

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        DatastoreService ds=DatastoreServiceFactory.getDatastoreService();

        String email = request.getParameter("email");
        String pass = request.getParameter("pass");
        double credit=request.getParameter("credit");
        double debit=request.getParameter("debit");

        int userKeyInt=0;
        Query q=new Query ("User");
        PreparedQuery pq=ds.prepare(q);
        for (Entity u1:pq.asIterable()){
           String emailStr=u1.getProperty("Email").toString();
           String userIDStr=u1.getProperty("UserID").toString();
           String passStr=u1.getProperty("Pass").toString();
           if(emailStr.equals(email) && passStr.equals(pass)) {
                 userKeyInt=Integer.parseInt(userIDStr);
           }
        }
        Key userKey=KeyFactory.createKey("User", userKeyInt);
        try{
           Entity user = ds.get(key);

           Entity savingAccount=new Entity ("SavingAccount");
           savingAccount.setProperty("UserID",  user.getKey());
           savingAccount.setProperty("Debit",debit);
           savingAccount.setProperty("Credit",credit);


         }

         catch (EntityNotFoundException e){
            e.printStackTrace();
         }


    }
}

所以 Savingaccount 有字段 "UserID" 扮演外键的角色。

Entity user = new Entity("User");
Entity savingAccount=new Entity ("SavingAccount");
savingAccount.setProperty("UserID",  user.getKey());

但我不确定我在做什么是对的,因为没有办法检查外键约束,我们是否需要建模实体关系,如本文所述linkhttps://cloud.google.com/appengine/articles/modeling?

如果我确实需要建模实体关系,那么该怎么做?

注意:每个用户可以有多个储蓄账户。

您可以使 SavingAccountEntity 成为 UserEntity 的子实体。它可能会变得有用,因为您可能决定更新事务中的实体以保持数据完整性。

使用这种方法,您可以通过对 SavingAccountEntity 进行简单的祖先查询来检索用户拥有的所有储蓄帐户。