[color=blue]现在有个公司表A
有公司的其他相关信息表:公司工商管理表B,公司违法信息表C,公司税务信息表D,公司工商管理表E。。。。。。,每条信息都有录入时间,每个表都通过外键companyid关键公司表A表的Id,表示这条信息属于哪个公司的。[/color]
[color=green]现在要做个查询,就是查询公司列表,同时查询这些公司没个公司最新录入的一条相关信息,这条信息可能是B表里的,可能是C表里的,也可能是D表里的,也可能是E表里的,要求只查询一条相关信息。
怎么做这个查询比较好呢。
1.查询公司的时候,再分别去查询B,C,D,E表里的企业相关信息里的最新的,然后再比较查询出来这几个表里的最新的?
2.在录入企业相关的BCDE表的时候,每录入一次,我都在A表里更新一下最新的,查询的时候直接在A表里把相关信息能直接显示出来了?[/color]
[color=red]怎么设计比较好呢,急,在。线。等。。。[/color]
个人感觉:应该把2再改造一下,新建一个表F,在F中记录每个公司的最新信息,当BCDE表有更新时,同时更新F表(保证F表中每个公司只有一条信息),这样比较好些。
原因:1、不会影响到原来的设计,A表不用修改
2、各个表的职责更清晰。
缺点:每次更新时多了一次更新(F表),
优化方案:异步的去更新F表。
1的方案比较好。只要语句设计好了,查询效率很高的。
2就有一个维护问题了。因为这些表只要有更新,都需要去维护公司表,带来了代码维护的问题。无论是在代码里面维护还是在数据库里面使用触发器,那么势必造成大量的维护代码。
方案1比方案2好:
只需要设计好SQL就可以解决问题,而且可以避免方案2中出现的数据冗余问题。
其实可以这样做,在页面上先显示公司列表,提供一个显示公司最新录入的相关信息查询链接,用ajax交互查询得出结果,返回显示。
这样的显示速度是最快的。
我觉得各有各的:
1的好处在于维护成本低,但查询复杂。效率较低 而且表与表的耦合太过紧密。
2方案 增加一张Z 表,有一定的维护成本,但结构比较清晰。维护成本在于 如果增加一张H表(公司其他信息) 那么在更新H表的同时 还得更新Z表。
从这里看,Z表有点像日志表或者监控表。如果是这样的话 我的建议方案二
至于策略上 采取用aop 方式拦截,然后用发消息方式直接更新Z表。