Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何构造数据_Java_Google App Engine_Google Cloud Datastore_Objectify - Fatal编程技术网

Java 如何构造数据

Java 如何构造数据,java,google-app-engine,google-cloud-datastore,objectify,Java,Google App Engine,Google Cloud Datastore,Objectify,我很难决定如何构建我的模型 我向用户页面展示了20条语句,每一条语句他要么表示同意,要么表示不同意。 我需要以有效的方式存储这些协议。这些语句会重复出现,因此每当用户看到他已经同意的语句时,它都应该显示在该语句旁边的页面上。此外,应该有一个选项,点击一个声明,查看所有同意/不同意该声明的人 所以换句话说,我总是需要知道某个用户是否标记了某个语句。这是一个需要执行多次的查询,因此必须尽快执行。查询哪些用户标记了特定语句的情况不太常见,如果不那么快也可以 这些是我提出的选择,我不确定哪一个更有意义:

我很难决定如何构建我的模型

我向用户页面展示了20条语句,每一条语句他要么表示同意,要么表示不同意。 我需要以有效的方式存储这些协议。这些语句会重复出现,因此每当用户看到他已经同意的语句时,它都应该显示在该语句旁边的页面上。此外,应该有一个选项,点击一个声明,查看所有同意/不同意该声明的人

所以换句话说,我总是需要知道某个用户是否标记了某个语句。这是一个需要执行多次的查询,因此必须尽快执行。查询哪些用户标记了特定语句的情况不太常见,如果不那么快也可以

这些是我提出的选择,我不确定哪一个更有意义:

选项1:具有如下所示的UserAgreement对象:

public class UserAgreement {
  User user;
  Statement statement;
  Boolean agree;
}
当我显示页面时,我通过用户X查询所有协议,并循环查看他标记了哪些语句。或者,对于用户+语句的每个语句查询

选项2:与以前相同的UserAgreement对象,但不是查询用户X,而是将它们全部存储在用户对象中:

public class User {
  Set<UserAgreement> userAgreements; 
}
当我显示页面时,我获取所有语句并循环遍历它们以查看标记了哪些语句。这里添加到用户对象的开销是否值得从选项1中删除查询?如果我有1000份协议呢

选项3:仅在用户对象中有一个协议列表,不需要UserAgreement对象:

public class User {
  Set<Statement> agreed;
  Set<Statement> disagreed;
}
当我显示用户时,我很容易检查语句是否在其中一个集合中。但是我可以反过来查询,所有同意特定声明的用户吗?再说一次,如果我有1000个协议呢?费用是多少


选项4:还有其他想法吗?

在我看来,如果语句对象包含通过唯一id与用户的关系,您的所有问题都会得到解决

因此,每当用户看到他已经同意的语句时,它都应该显示在语句旁边的页面上

每次加载20条语句时,如果每条语句都有一个与该语句一致的id列表,则可以根据这些列表中是否存在该用户的id来确定当前用户是否同意。这里不需要布尔值;id的存在决定了正确/错误

此外,应该有一个选项,点击一个声明,查看所有同意/不同意该声明的人

同样,如果每条语句都有与其一致的id列表,则可以显示该列表,将这些id链接到与该id关联的用户对象的用户名之类的内容

所以换句话说,我总是需要知道某个用户是否标记了某个语句。这是一个需要执行多次的查询,因此必须尽快执行

由List.containsObject确定,其中对象将是userId,返回值将是true或false,具体取决于该id是否在列表中

查询哪些用户标记了特定语句的情况不太常见,如果不那么快也可以


这与上面的观点相同。获取属于某个语句的列表,然后列出。containsobject o

您的语句的性质是什么?它们是像法律一样一成不变的静态值,还是您需要处理可能出现的新语句?它还可能影响数据建模的方式。