关系型数据库中,对于多对多关系的特殊处理
如果authid没多少记录而且偏向静态,那一般程序会在初始化的时候直接读取所有authid到内存。这样即使role里面只用一个字段记录authid的集合,结果可能反而更快更方便。其实估计roleid本身也很小,完全可以直接读取到内存中的某种数据结构。所以这东西和数据库关系不大,最多算是用数据库存放了一些基本配置信息,根本不用考虑索引啊性能啊之类的问题。当然缺点是当你插入一个新的role的时候,你没法通过数据库自身的机制保证authids里面的id是存在于authid表的。但是只要你的程序可以保证这点那也是可接受的。反正就是一个config,你就算存在xml文件里也没什么不好。
■网友
你的问题有三个请问这种处理方法对吗?有何优缺点?和添加中间表有何区别?先说后两个,我不打算回答你,因为这是一个long story,你需要的是学习数据库范式的知识https://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A7%84%E8%8C%83%E5%8C%96对数据库范式有充分的理解之后,你的后两个疑问就自然得到解决了。再说第一个疑问,「请问这种处理方法对吗?」,答案是,不对,但也有对的时候。从数据库范式的角度来说,我们一般要求数据库设计满足第三范式以上的规约,而对大多数应用系统来说,遵循第三范式以上的数据库规约也是基本要求。但是,严格的范式要求会带来性能的下降以及程序复杂度的上升,因此在实践当中,我们并不总是遵循范式要求的,经常会根据实际情况打破范式。就你举的这个例子来说,我可以说的是在99%的情况下,这种设计是不好的,如果你看的视频是作为学习教材来举例的话,那即使这个设计是有实际意义的,那作为学习教材也是不合适的。最后,强调一下,离开实际场景谈数据库设计是否合理是没有意义的,所有的设计都是为了实际需求服务的,但同时也强调一下,对初学者而言,所有没有遵循第三范式+的数据库设计,都是不对的。
■网友
采用中间表即可,不用纠结。
推荐阅读
- 5.1声道片源对于没有5.1硬件系统的用户来说有意义吗
- |常州天宁:检察建议让“忙道”回归盲道
- 英雄联盟快捷键Q、E、R咋操作呢
- 考研数据库方向
- 哪个数据库,可以直接做数据透视图(navicat类的也可以)
- 2017年iPhone性价比最高的是哪款产品
- 友盟对于日活是怎么样统计的
- 贵州对于大数据有哪些方面的地域优势为啥都是贵州呢
- 对于一个程序员、靠拿工资攒钱买房、是不是太遥远
- 客服对于一个电商平台起到多大的作用
