Performance PostgreSQL-管理用户';s触点-单向或双向关系更好?
我正在研究如何使用Vaadin+JPA+EclipseLink+PostreSQL开发一个用于共享图片的web应用程序,以及这种组合是否适合此目的。我正在为管理用户联系人的决定而挣扎。在解释表的结构后,我将进一步详细介绍这一点: 用户表 用户表由以下列组成:Performance PostgreSQL-管理用户';s触点-单向或双向关系更好?,performance,postgresql,jpa,eclipselink,user-management,Performance,Postgresql,Jpa,Eclipselink,User Management,我正在研究如何使用Vaadin+JPA+EclipseLink+PostreSQL开发一个用于共享图片的web应用程序,以及这种组合是否适合此目的。我正在为管理用户联系人的决定而挣扎。在解释表的结构后,我将进一步详细介绍这一点: 用户表 用户表由以下列组成: 用户ID-注册时自动生成(唯一) 用户名-用户的名称;注册时定义(唯一) 密码-用户的密码;注册时定义 上传-用户上传的图像的所有ID。我不会在这里详述,因为这与我的问题无关。只需说明,此列与另一个名为Images的表一起使用,用于管理当
- 用户ID-注册时自动生成(唯一)
- 用户名-用户的名称;注册时定义(唯一)
- 密码-用户的密码;注册时定义
- 上传-用户上传的图像的所有ID。我不会在这里详述,因为这与我的问题无关。只需说明,此列与另一个名为Images的表一起使用,用于管理当前用户的库
- 用户ID-拥有联系人的用户ID(见下文)
- 联系人-存储具有用户ID的用户授予查看其图像库权限的所有用户ID 注意:这不是一种双向关系。这意味着,当用户X将用户Y添加到其联系人中时,用户X将访问其自己的图像库的权限授予用户Y。但是,这不会使用户Y的库对用户X可见。只有当用户Y也将用户X添加到其联系人中时,才会发生这种情况。图像可以是公共的,也可以是私有的。所有用户都可以查看公共图像,但只有拥有这些图像的用户以及所有者通过将其添加到联系人中而授予访问权限的所有其他用户才能查看私人图像。“私人”可能不是这里最好的术语,所以你可能会将其视为“允许朋友查看”之类的东西
- 单向关系-不要更改用户表,只需遍历其中的所有用户,然后遍历每个用户的联系人,查找我要删除的当前用户的用户ID
- 双向关系-为用户添加一个名为addedBy的新列,该列存储已将我要删除的当前用户添加到其联系人中的用户的所有用户ID。每次用户X将另一个用户添加到他的联系人中时,该另一个用户将用户X“添加”到他的添加列表中,而不是联系人中
你知道哪一个更好吗?用户数量并不重要,因为这纯粹是为了研究而做的,但是用户表中的成百上千个条目应该会让事情变得更现实。我认为你的同事有某种正确的方法,但没有完全同意 “联系人表”,这个表看起来像一个多对多关系表 但问题正如你所描述的: Contacts-存储具有用户ID的用户提供的所有用户ID 允许查看他的图像库 在真正的多对多关系表中,您将有两列
- “用户id”,您已经拥有的内容
- “contact_user_id”(命名可能明显不同),但主要的一点是您有一个sin
delete from Contacts where contact_user_id = :userIdOfUserToBeDeleted