A表拥有多个C表,B表拥有多个C表,一个C表只能属于A表或者B表,如何优雅地建立关系,使可以用最少的查询次数将A和B以及他们拥有的C一起查询出来
现在我有一个方案,就是C里面放两个外键,AId,BId,但是总觉得这样不够优雅。而且如果将来有了D表想要关联C表,还得改C表。
新建一个表 列名如下 cid relate_id relate_table
一个字段保存主键,另一个字段保存表名
虽然不知道你是什么语言,不过你的需求很像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
分开多表 一个存为关键索引 一个为数据