Java 如何构造数据
我很难决定如何构建我的模型 我向用户页面展示了20条语句,每一条语句他要么表示同意,要么表示不同意。 我需要以有效的方式存储这些协议。这些语句会重复出现,因此每当用户看到他已经同意的语句时,它都应该显示在该语句旁边的页面上。此外,应该有一个选项,点击一个声明,查看所有同意/不同意该声明的人 所以换句话说,我总是需要知道某个用户是否标记了某个语句。这是一个需要执行多次的查询,因此必须尽快执行。查询哪些用户标记了特定语句的情况不太常见,如果不那么快也可以 这些是我提出的选择,我不确定哪一个更有意义: 选项1:具有如下所示的UserAgreement对象:Java 如何构造数据,java,google-app-engine,google-cloud-datastore,objectify,Java,Google App Engine,Google Cloud Datastore,Objectify,我很难决定如何构建我的模型 我向用户页面展示了20条语句,每一条语句他要么表示同意,要么表示不同意。 我需要以有效的方式存储这些协议。这些语句会重复出现,因此每当用户看到他已经同意的语句时,它都应该显示在该语句旁边的页面上。此外,应该有一个选项,点击一个声明,查看所有同意/不同意该声明的人 所以换句话说,我总是需要知道某个用户是否标记了某个语句。这是一个需要执行多次的查询,因此必须尽快执行。查询哪些用户标记了特定语句的情况不太常见,如果不那么快也可以 这些是我提出的选择,我不确定哪一个更有意义:
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您的语句的性质是什么?它们是像法律一样一成不变的静态值,还是您需要处理可能出现的新语句?它还可能影响数据建模的方式。