Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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 在webapps中探索特定于用户的数据_Java_Spring_Database Design_Web Applications - Fatal编程技术网

Java 在webapps中探索特定于用户的数据

Java 在webapps中探索特定于用户的数据,java,spring,database-design,web-applications,Java,Spring,Database Design,Web Applications,我正忙于设计一个简单的待办事项列表webapp,用户可以通过该应用进行身份验证并保存待办事项列表项。用户还只能查看/编辑他们添加的待办事项列表项 这似乎是大多数web应用程序(或一般应用程序)中的一个通用功能(经过身份验证的用户只查看自己的数据) 对我来说,重要的是了解实现这一目标的不同选择。我想要实现的是一个能够有效处理大量用户数据的解决方案。目前,我正在使用关系数据库进行此操作,但noSQL答案对我也很有用 我想到了以下想法: 每次需要此“功能”时添加一个用户id列。 添加关联数据的关联表(

我正忙于设计一个简单的待办事项列表webapp,用户可以通过该应用进行身份验证并保存待办事项列表项。用户还只能查看/编辑他们添加的待办事项列表项

这似乎是大多数web应用程序(或一般应用程序)中的一个通用功能(经过身份验证的用户只查看自己的数据)

对我来说,重要的是了解实现这一目标的不同选择。我想要实现的是一个能够有效处理大量用户数据的解决方案。目前,我正在使用关系数据库进行此操作,但noSQL答案对我也很有用

我想到了以下想法:

  • 每次需要此“功能”时添加一个用户id列。
  • 添加关联数据的关联表(在上面的示例中为user\u todo\u list\u item表)。
  • 以这样一种方式设计,即每个用户每个“功能”都有一个表。。。因此,您将有一个todolist_userABC表。这是一个选项,但我不太喜欢它,因为一千个用户意味着一千张桌子?!
  • 将行级安全性添加到特定的“功能”。我不熟悉这是如何工作的,但它似乎是一个有效的选择。我也不确定这是否是特定于数据库供应商的

    在我的选择中,我选择了todolist_item表上的user_id列。虽然它可以完成这项工作,但我觉得如果表中的数据足够大,那么在读取数据时,user_id列可能会有问题。我想可以添加一个索引,但我不确定该索引的有效性

    我不喜欢的是,我需要为每一个我想要这种类型的功能的表设置一个用户id,这对我来说似乎不正确?似乎在实现数据库层时,我必须将其添加到对每个特性的查询中(除非我使用一些AOP)

    我环顾了一下(),但它没有提到有关user_id列或类似内容的技术。我还尝试在一些安全框架(具体来说是Spring安全性)中阅读这方面的内容,但它似乎只涉及表级别的特权/权限,而不是行级别


    所以问题是我的选择是否合适,是否有更好的技术来做到这一点?

    你的选择是很自然的事情

    每个用户的表是非起始表(响应用户操作而修改数据库结构的任何内容通常都是可疑的)

    行级安全性并不是webapps真正的选项,它要求每个用户会话都有一个单独的、持久的数据库连接,这几乎是不实际的。是的,它是特定于供应商的

    索引表的方式完全取决于使用模式和要运行的查询类型。“为用户显示所有TODO”是您想要支持的查询吗(看起来是这样的)?然后,显然需要用户id上的索引


    为什么用户id列对您来说似乎是错误的?如果要按用户限制访问,则需要能够识别记录所属的用户。实际上并不意味着每个表都需要它——例如,如果一条记录组成另一条记录(比如,您的TODO有“步骤”,每个步骤都属于一个TODO),只有对象图的根需要用户id。

    这并不是因为user\u id列错了,只是如果一条记录添加了更多需要此项的表,那么这看起来很麻烦。不过,只让对象图中的根包含用户id的想法是有用的。