Mysql 在同一列中引用外键

Mysql 在同一列中引用外键,mysql,database-design,polymorphic-associations,Mysql,Database Design,Polymorphic Associations,我正在为mysql设计一个bd方案。My db存储3种点:a、b或c,路径由n对点组成: 路线=[(a1或b1或c1;a2或b2或c2),(a2或b2或c2;a3或b3或c3),…] (*)一对点是(m,n)或从m到n 所以我将一对点和它们的路径id一起存储。我的问题是我必须创建两列来标识表的名称m和n。表_-from表示m,表_-to表示n。因此,我必须在代码中使用这两列来了解路由中保存了哪些类型的点(路径和点对表)。我的问题:MySql是否提供了引用同一列中n个外键的功能?我已经考虑过加入a

我正在为mysql设计一个bd方案。My db存储3种点:a、b或c,路径由n对点组成:

路线=[(a1或b1或c1;a2或b2或c2),(a2或b2或c2;a3或b3或c3),…]

(*)一对点是(m,n)或从m到n

所以我将一对点和它们的路径id一起存储。我的问题是我必须创建两列来标识表的名称m和n。表_-from表示m,表_-to表示n。因此,我必须在代码中使用这两列来了解路由中保存了哪些类型的点(路径和点对表)。我的问题:MySql是否提供了引用同一列中n个外键的功能?我已经考虑过加入a、b和c点表,但我必须在这个新表中添加一个类型列,我的php类将变得毫无用处


提前谢谢

您正在使用一种称为多态关联的模式,不,没有办法这样做,而是使用外键来强制引用完整性

我建议您制作一个通用表格,用于参考
a_点
b_点
,以及
c_点
。然后,点对可以引用该公共表

a_points -->
b_points -->  common_points  <-- point_pairs
c_points -->
a_点-->
b_点-->公共_点

换句话说,使多态关联起作用的方法是反转引用的方向。

这是我在其他讨论中提到的“泛化-专业化模式”的一个很好的总结。“我将不得不学习多态关联。”沃尔特·米蒂:前几天我看到你提到过这一点。我想你是唯一一个用这个短语来形容它的人。多态关联是Hibernate、Ruby on Rails等中使用的术语。对于
a_点
b_点
c_点
,使用与
公共_点
中的
主键
相同的GUID,也是一个好主意吗?这样,我就可以有一个表
meta
,它可以充当所有多态关联的中间人。@paulkon,使用相同的主键值是个好主意,但我不认为使用GUID是个好主意。有关使用GUID主键效率低下的演示,请参阅本博客:
a_points -->
b_points -->  common_points  <-- point_pairs
c_points -->