在webapps中探索用户特定数据

时间:2013-01-08 07:49:57

标签: java spring database-design web-applications

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

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

对我而言,重要的是了解完成此任务的不同方案。我想要实现的是一个可以处理大量用户的解决方案。数据有效。目前我正在使用关系数据库这样做,但是没有SQL的答案也对我有用。

我想到了以下想法:

  • 每次此"功能"添加一个user_id列需要。
  • 添加关联数据的关联表(在上面的示例中为user_todo_list_item表)。
  • 以这样一种方式进行设计:每个用户每个"功能" ...所以你有一个todolist_userABC表。这是一个选择,但我不喜欢它,因为一千个用户意味着一千张桌子?!
  • 将行级安全性添加到特定的"功能"。我不熟悉这是如何工作的,但它似乎是一个有效的选择。我也不确定这是否是数据库供应商特定的。

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

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

    我浏览了一下(How does Trello store data in MongoDB? (Collection per board?)),但它没有谈到有关user_id列或类似事情的技术。我也尝试在一些安全框架(特别是Spring Security)中阅读这个内容,但它似乎只涉及表级别的特权/权限而不是行级别?

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

  • 1 个答案:

    答案 0 :(得分:0)

    你的选择很自然。

    每个用户的表是一个非启动者(任何修改数据库结构以响应用户操作的东西通常都是可疑的。)

    行级安全性实际上不是webapps的一个选项 - 它要求每个用户会话都与数据库建立单独的持久连接,这很少实用。是的,它是特定于供应商的。

    如何索引表格完全取决于您的使用模式和要运行的查询类型。是'为用户显示所有TODO'你要支持的查询(看起来会是这样)?然后显然需要用户ID的索引。

    为什么让user_id列出现错误?如果要限制用户访问,则需要能够识别记录所属的用户。实际上并不意味着每个表都需要它 - 例如,如果一个记录组成另一个(例如,你的TODO有'步骤',每个步骤属于一个TODO),只有对象图需要用户ID。