反思以前对“多对多”关系处理的设计

2008-02-23 09:36:34来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

反思以前对多对多关系处理的设计

很多公司的笔试题都喜欢考这一道:有n个供货商和m种货品,每个供货商可能供应多种货品,每种货品也有可能由多个供货商供应,建立相应的数据库表维护供应商和货品以及他们的供货关系。

这类多对多问题其实在真实的系统中很常见,比如用户--角色,角色--权限,用户--用户组等等。对接触过类似的系统的人这当然不是问题,三个表,套路来的嘛。

当然有其他方式,比如供货商表中添一个货品列表字段,用XML或者约定的格式保存货品列表,但是这样一是查询更新效率很低(查询的时候要解析数据,更新的时候要解析并重新组合数据,反向查找的时候更低效),二是没有办法建立外键约束。对第反向查找的问题,如果我们允许数据冗余并且有信心维护好数据一置性的话可以同时在货品表中添加一个供货商列表字段。但是除了效率、约束(以及冗余,假如它也算问题的话)之外,还有个最重要的问题我们忽略了:这样的设计不优雅。

但是在数据库表之外,我们做系统的时候是怎么处理类对应关系的呢?我没有看到过别人的设计,但是在我的系统中使用的其实是类似于上面说的第二种方式,比如在用户对象中有一个角色列表字段,存储了与用户关联的角色。当然解析数据带来的效率问题不存在了,因为角色信息是以原始方式保存的;数据一置性问题也由数据库解决。系统工作的很稳定也很快,但是我们一直忽略了这个问题:这样的设计优雅吗?我认为我们可以做的更好。

假如我们象设计数据库表一样的设计系统,系统本来可以做成这样子的:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何利用jgroups实现分布式环境下消息的接受和发送

下一篇:使用J2SE API读取Properties文件的六种方法