A拥有多个C,B拥有多个C,一个C只能属于A或者B,如何建立关系?

spacelan
  • 925

A表拥有多个C表,B表拥有多个C表,一个C表只能属于A表或者B表,如何优雅地建立关系,使可以用最少的查询次数将A和B以及他们拥有的C一起查询出来

现在我有一个方案,就是C里面放两个外键,AId,BId,但是总觉得这样不够优雅。而且如果将来有了D表想要关联C表,还得改C表。

回复
阅读 2.6k
4 个回答
charleyw
  • 1.5k
✓ 已被采纳

虽然不知道你是什么语言,不过你的需求很像Active Record中的多态关系。
polymorphic.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

已注销
  • 5
新手上路,请多包涵

分开多表 一个存为关键索引 一个为数据

宣传栏