其实不必追求实体关系图的合理,也未必非要用外键,虽然可以没有约束,但是依然可以由程序来很好的管理这些
不过非要追求这个的话,我以前倒是做过一个,效果也还可以,可以参考一下:
管道表里包括:起点连接管件ID、起点连接设备ID、终点连接管理ID、终点连接设备ID、其他属性信息
前面四个ID都是外键,管件ID和设备ID分别关联到各自的表,四个都设置为可空,这样在程序中或者select时判断一下到底取哪个,但依然存在的问题是必须由程序来保证起点和终点都各自只有一个ID,另一个要为NULL。
另外一个办法,可以避免这个很麻烦的判断,但是其他地方要麻烦一些,还是这些字段,增加一个起点连接类型和终点连接类型,select的时候在inner join中除了ID关联之外,增加对连接类型的条件,另外也可以使用union all来进行查询
添加一个中间表,有4个字段:
管道ID、
起点或中点【管道的起点还是终点】、
连接对象类型【管道的起点或终点是设备还是管件】、
连接对象ID【管件或设备的ID】