在数据库中指定用户权限的最有效方法是什么?

时间:2010-12-08 20:26:39

标签: database database-design scalability relational-database

我有一个应用程序,以Facebook风格的方式将用户与特定群组相关联。

例如:

  

用户A与第1组和第2组相关联

     

用户B与第2组和第4组相关联

用户可以为他们所属的每个群组创建帖子(少量文字)。

我有两种类型的页面:登录用户的主页和每个组的页面。用户的主页显示来自登录用户所属的每个组中的每个其他用户的帖子。组页面显示来自该组中的每个用户的所有帖子

我不是想在这里复制FaceBook,但我能想到的最接近的功能是来自FaceBook上的一位朋友的消息如何显示在您的实时供稿页面以及用户的墙上(个人资料)页)。

在我的应用程序中,我有这三个模型(伪代码):

class User():
    user_name
    first_name
    last_name

class Group():
    group_name

class Post():
    post_content

在数据库可扩展性和性能方面将这些数据关联起来的最有效方法是什么?

1)将每个帖子与用户和组相关联。当用户查看组时,从Post表中选择组ID =当前组的所有帖子。当用户查看自己的主页时,请查看该用户所属的组,并查找属于该组的所有其他用户。然后,从这些用户中提取所有帖子。

2)将所有帖子与用户关联。当用户查看自己的主页时,请查看该用户所属的组,并查找属于该组的所有其他用户。然后,从这些用户中提取所有帖子。查看群组页面时,查找属于该群组的所有用户,然后提取与这些用户关联的所有帖子。

3)创建一个具有PostID,UserID和GroupID的连接表。查看群组时,查找具有GroupID的所有帖子并提取这些帖子。查看登录用户的主页时,查找用户所属的所有组,然后查找属于这些组的所有用户,然后为这些用户提取所有帖子。

所有这些解决方案似乎都需要大量额外的工作才能为用户的主页提取记录。这些选项都不是最好的解决方案。我相信有人有这方面的经验。我期待大量的帖子,所以我希望数据库可以扩展以支持X个记录。

有没有办法做到这一点更有意义?大公司如何设法做同样的事情并减少他们的开销?

1 个答案:

答案 0 :(得分:1)

您尚未说明您拥有哪些数据库。

对于内置了安全(权限)系统的ISO / IEC / ANSI SQL数据库,您不需要这样做,只需使用SQL工具设置权限即可。它是内部的,非常快。

如果您需要性能,可伸缩性和数据完整性,则需要放弃对象和类的想法,并了解一些关系数据库。除此之外,如果您将数据建模为关系数据库(而不是对象类),则上述90%的问题将不存在。

如果您不明白我的意思,请阅读recent post(从12月10日标题开始)。

  

有没有办法做到这一点更有意义?大公司如何设法做同样的事情并最大限度地减少开销?

是的,绝对的。它没有任何意义。有意义的是正确建模数据,因为标准化模型整体上要快得多。这导致更多,更小的表,而不是更少的胖表;算术和物理定律的工作。没有数据重复意味着没有更新异常,这意味着事务更小并且不太可能阻塞(您确实希望允许多个用户并发访问,对吧?)。

此外,您的编码将受到阻碍,因为您无法弄清楚数据与其他数据的关系。在您的问题中抛出您的实体(所有页面的数据内容)(编辑并添加到其中),我们就可以开始了。我可以看到UserGroupPost,但是Wall呢?任何其他家具; PhotosAlbums

相关问题