按照我对范式的理解,表的多对多需要三张表.
比如电影和电影分类是多对多关系,需要电影表,电影分类表,电影电影分类关系表.但是我问我一个同学,他说很多时候多对多用两张表实现,上面那个例子
只需要电影表,分类表.
电影表里有个字段记录电影对应的分类id.
从电影查分类直接就可以根据分类id查到,从分类查电影对那个有分类id的字段做like查询.这两种方式在性能上有什么区别?都适应于什么样的情况呢?另外我似乎在什么地方看到过说hibernate里最好不要用多对多,是什么意思呢?
比如电影和电影分类是多对多关系,需要电影表,电影分类表,电影电影分类关系表.但是我问我一个同学,他说很多时候多对多用两张表实现,上面那个例子
只需要电影表,分类表.
电影表里有个字段记录电影对应的分类id.
从电影查分类直接就可以根据分类id查到,从分类查电影对那个有分类id的字段做like查询.这两种方式在性能上有什么区别?都适应于什么样的情况呢?另外我似乎在什么地方看到过说hibernate里最好不要用多对多,是什么意思呢?
like这东西,我理解性能还是有影响另外,hibernate里最好不要用多对多
这句话跟你这个三张表没冲突
他是说,用两个一对多,比一个多对多好点儿
这个跟数据库本身没关系,就是hibernate中的映射配置问题!现在说说两个表和三个表的区别
按你举得例子,最大的区别就是按分类来查询电影
三个表的时候,直接通过分类id查到所有影片的id,这些关键字段都可以在数据库中建立索引,速度应该很快两个表,我理解你是在电影的分类id字段存所有的分类id,比如","号分隔,like查询首先数据库处理like查询,比建立索引的关键查询慢很多,我个人这么理解。数据量小的话,这应该不明显,但是数据量大的话,估计会差几个数量级
什么情况下用哪种比较好.ps:to ZiSheng:明明就是多对多..囧...