84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
A表拥有多个C表,B表拥有多个C表,一个C表只能属于A表或者B表,如何优雅地建立关系,使可以用最少的查询次数将A和B以及他们拥有的C一起查询出来
现在我有一个方案,就是C里面放两个外键,AId,BId,但是总觉得这样不够优雅。而且如果将来有了D表想要关联C表,还得改C表。
业精于勤,荒于嬉;行成于思,毁于随。
虽然不知道你是什么语言,不过你的需求很像Active Record中的多态关系。可以忽略图上的代码,只看上面的数据库表的关系:A可以对应为上图的employees, B对应products, C就是pictures
pictures表里面的imageable_type就是引用这个记录的表名(例如employees),imageable_id是引用这条记录的id(例如employee的id),两个字段合起来就可以找到具体是那个表里面的哪个字段引用这条记录。详细内容参照这里:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
imageable_type
imageable_id
一个字段保存主键,另一个字段保存表名
新建一个表 列名如下 cid relate_id relate_table
分开多表 一个存为关键索引 一个为数据
虽然不知道你是什么语言,不过你的需求很像Active Record中的多态关系。
![](http://img.php.cn/upload/image/000/000/000/1110eae705d60949560587f746947f44-0.png)
可以忽略图上的代码,只看上面的数据库表的关系:A可以对应为上图的employees, B对应products, C就是pictures
pictures表里面的
imageable_type
就是引用这个记录的表名(例如employees),imageable_id
是引用这条记录的id(例如employee的id),两个字段合起来就可以找到具体是那个表里面的哪个字段引用这条记录。详细内容参照这里:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
一个字段保存主键,另一个字段保存表名
新建一个表 列名如下 cid relate_id relate_table
分开多表 一个存为关键索引 一个为数据