mysql一对多怎么操作 mysql一对多查询

数据库如何建立表间一对多关系MySQL里面有如下的表
user:id username
photo:id name
photo_favour(图片收藏关系表):photo_id user_id
假设这几个表都相当大,需要进行分表 。我的分表规则是:
user表按照id取模,这样user相关的表都可以按照这个取模后的结果来分表;
photo表按照id取模,同样与photo相关的表都可以按该规则分表;
至于photo_favour是一个多对多的关系表,我现在的想法是该表复制多一份,一份以photo_id来分表,一份以user_id分表,分别建立不同的索引 , 这样就变为两个一对多的关系 。
我有两个问题:
1、这样的分表可行吗,有更好的分表方法吗?
2、一对多的关系在进行分表时候,例如user表和user_favour表都按照user_id来取模得到序号x来确定分表 。如果1个用户会有100条收藏记录,那么user_x有100W条记录时候user_favour_x分表就有1000W记录,这时候user_favour_x又需要分表了,怎么解决这种情况?
这种情况我会放弃多对多的形式 , 弄两个表
user_to_photos: user_id, photo_id_list
photo_to_users: photo_id, user_id_list
1个user喜欢的photo id全塞到photo_id_list
1个photo被哪些用户喜欢了,也全塞到user_id_list
这样的读取就高效了很多 , ,写的时候注意并发脏写 。。。同样你根据user_id爱怎么分表就怎么分 。
===
如果收藏量太大,还是不能满足,就要考虑切分记录,1个user可以拥有多条记录,每条记录都可记录多个photo id
user_to_photos: user_id, num, photo_id_list
num字段可有可无,如果你需要精确定位user 222 收藏的 photo 333在哪条记录,就需要安排好算法,找到对应的num
大概是这样,重点是算法逻辑
【mysql一对多怎么操作 mysql一对多查询】数据库中建表时经常所说一对一、一对多、多对多等等关系究竟是什么意思?分别在什么情况下要用到一对一或一对式,而又在什么情况下又要用到多对多?在这里我们详细分析 , 并且用实例来讲解各种关系的实际运用!
关联映射:一对多/多对一存在最普遍的映射关系,简单来讲就如球员与球队的关系;一对多:从球队角度来说一个球队拥有多个球员 即为一对多多对一:从球员角度来说多个球员属于一个球队 即为多对一数据表间一对多关系如下图:
关联映射:一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队 。数据表间一对一关系的表现有两种 , 一种是外键关联,一种是主键关联 。图示如下:
一对一外键关联:
----------------------------------------------------------------------------------------------------------
前言:多对多关系至少需要3个表,我们把一个表叫做主表,一个叫做关系表,另外一个叫做字典表或者副表(字典表是纪录比较少,而且基本稳定的,例如:版块名称;副表是内容比较多,内容变化的 , 例如) 。
按照数据库的增删查改操作,多对多关系的查找都可以用inner join或者
select * from 主表 where id in (select 主表id from 关系表)
1,角色任命型
特点:关系表两外键组合无重复纪录 , 关系表一般不需要时间字段和主键,有一个表是字典类型的表 。
界面特点:显示主表,用checkbox或多选select设置多选关系 。
例如:任命版主(用户表-关系表-版块名称表),角色权限控制等,用户是5个版块版主,只要关系表5行纪录就可以确立,关系表的两个外键具有联合主键性质 。
增加关系:如果没有组合纪录,insert之 。

推荐阅读