论坛首页 入门技术论坛

这样一个三元的多对多关系该如何设计与映射?

浏览 2811 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-08-08  
例如下面3个实体类:

public class Role {

private Long id;

private String name;
}

public class Category {

private Long id;

private String name;

private Category p_category;
}

public class Staff
{
  
   private Long id;
 
   private String name;
}

Staff与Category多对多,Staff与Role也是多对多
画了一个ER图(不知道怎样直接能贴出来,只好放附件),不知道这样的设计是否合理?

我是这么想的:把上面3个实体间的联系类authority实体化,把多对多都转换成一对多,即:
Staff,Category,Role分别与Authority一对多
public class Authority {

private Long id;

private Category category;

private Staff manager;

private Role role;

private Integer status;//0/1,状态是否有效
}
这样通过Authority就能清楚知道谁被授予什么管理员身份(角色)去管理哪个分类,
但是我开始转不过弯了,多对多里,可以直接staff.roles,staff.categories,把多对多拆成与中间表Authority一对多之后,我该怎么才能通过staff查询出对应的roles呢?是不是得自己写SQL做左连接,右连接才能查询出来?
  • 大小: 7 KB
   发表时间:2007-08-13  
ruby有一个关系叫作 (多态)表
他的中间表Authority只有四个字段
id           =>主键
staff_id     =>用户对应id
Authority_id   =>其它业务对应的id(role_id,Category_id)
Authority_type =>对应的表的名子。

那么就可以通过Authority表找到一一对应的关系表了。
0 请登录后投票
   发表时间:2007-08-14  
假如Authority表是这样一个结构(id,staff_id,role_id,category_id,status),要查用户A被授予的角色(一个用户可以同时分别被授予多个不同的角色去管理多个分类),使用关联查询时,我只能想到这么写(假设中间表Authority已经实体化,并分别与Role,Category,Staff建立一对多关联):

List roles;
//用户Staff A
Iterator authoritys=A.authoritys.iterator();
if(authoritys.hasNext()){
	Authority auth=(Authority)authoritys.next()
		roles.add(auth.role);
}


如果分别使用many-to-many来对Role,Category,Staff三实体进行关联(不实体化联系Authority),直接A.roles就实现用户A的角色查询了,如上面拆成一对多之后感觉好麻烦,我想不出怎样写才能更简便的查询出来
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics