多用户webapp数据库方案

时间:2016-02-29 18:53:22

标签: database database-design relational-database backend

我正在尝试构建一个家庭图书馆管理客户端/服务器应用程序,具有以下功能:

  • 一台服务器(后端+ DB)可以为多个用户提供服务
  • 几个不同的前端可以通过API连接到后端,并获取他们拥有正确访问权限的JSON信息。
  • 每个用户都有
    • 普通ID信息(电子邮件,密码等)
    • 他可以借出书籍的许多“联系人”。
    • 他拥有的书籍清单和书籍愿望清单。

我很关心数据库组织的设计,因为这是我第一个需要超过两三个关系表的“大”项目。我已阅读thisthisthis,但很难谷歌这样一个开放的问题,我不确定我在可能的文档来源中寻找的功能。

我的问题如下:根据以下哪种(或其他)数据库方案是最佳的:安全性,速度和维护的顺序。

  1. 每个用户信息:每个应用用户都有一个等效的数据库用户和包含图书,作者,流派,联系人和贷款的表格。即使规模小,也很容易实现和保护,恕我直言这似乎是一种非常低效的方式,主要是出于缩放的原因:首先,这意味着如果两个用户拥有相同的书,我将存储重复的书籍,是一种浪费,如果我有大量的用户而不是我预期的管理地狱(见this问题)

  2. 一个用户来统治它们:后端可以使用一个“myapp”用户与数据库通信。这意味着只有一张桌子可供所有书籍,用户,作者等使用......但我看到以下问题:如果整个世界都使用该应用程序,这将会很好用 - 但我的用户主要是借书给外部人士(目标是有一个移动应用程序,允许选择联系人作为借款人)。我想知道如何存储通常需要完整表格的每用户信息,例如所拥有的书籍和元数据(分数,读取时间,日期......),或者联系人列表目前借出/借用。

    • 一个天真的解决方案就是将联系人添加为“未注册”用户,因此他们拥有主要用户密钥,我们可以拥有一个巨大的“贷款”表。然而,这会引起安全问题:我不确定如何禁止用户与他人联系......
    • 另一种解决方案可能是让“系统”表包含有关注册用户的信息,例如包含书籍(元)数据的“书籍”表,然后是包含用户特定信息的myapp_(用户主键)表。 / LI>
  3. 别的什么?
  4. 我从来没有真正做过任何严肃的网络服务开发,因为我这样做是为了好玩,我不知道“通常”是怎么做的。 欢迎提出任何建议,想法,见解和澄清要求!

    编辑:Here是我想要存储的数据的ER图。另外,在评论中阅读了MSDN文章(实际上整个系列很有意思)我想我现在想要选择:

    • 适合所有人的大表并使用视图来限制访问;
    • 创建每用户方案。

    我还认为对我的目标公众更精确一点可能是一个好主意:我想创建一个小型开源服务器,可以支持少量(<100)人。客户端将能够配置他们想要连接的服务器,因此任何人都可以自己托管;如果可能的话,进行水平扩展的能力是一个目标,但我不希望有足够的用户扼杀单个数据库实例。

    PS:附带问题:如果他没有留下任何书籍,我应该从联系人表格中删除联系人,尽可能少地将信息保存在除我的用户之外的其他人身上 - 或者我是否应该使用特权并留住他们? (毕竟有些社交网络公司不会给出该死的......)

0 个答案:

没有答案