如果有这样一个系统
用户分三级,我们可以类别为中央,省级首长,市级领导
河北省省长发的消息,自己可以看到,中央可以看到,但是他的下属石家庄的市长,保定市市长就看不到,同时他的平级伙伴陕西省省长也看不到他发的信息。
西安市市长发的消息,自己可以看到,陕西省省长也可以看到,中央的领导也能看到,但是他的平级例如保定市,安康市都看不到
说白了就是一个多叉树结构,节点只能看到自己的消息,和自己孩子节点及孩子节点的孩子的消息
怎么设计这个系统呢?
我自己从工厂领域想到办法是,数据库里每个消息除了id及本身的固有信息外,再多加三个字段,type1,type2,type3。
如果中央首长发消息,type1就是中国,type2与type3留空
如果是陕西省长发消息,type1是中国,type2就是陕西省,type3留空
如果是保定市市长发消息,type1就是中国,type2就是河北省,type3就是保定市
这样如果我要查陕西省省长能看到的所有消息那就是 type2=陕西 就OK
保定市的就是 type3=保定 即可
西安交大的张晨看到我的思路后说,这个没法扩展,如果有有几千级用户,你条数据记录岂不是得有type1000?
他的思路是每个消息后面加一个字段 parent_Node_id 这样查询陕西的时候,就递归查询谁的parent是陕西,得到西安,咸阳两个节点,然后递归...
后来分析一下,我的想法是工程角度,以解决问题为主,张晨的思维是算法角度,强调了系统的可扩展性
两种思路各有利弊,写这篇文章第一是让我记住这个问题和解决方案,第二也是更重要的一点,那就是学会从多个角度分析问题解决问题。