考虑一个匹配客户端和服务的模型。客户在不同时间既可以是服务的提供者,也可以是服务的消费者。客户可能是个人或团体(公司),后者有多个联系人。联系人可能有多个地址、电话、电子邮件。其中一些关系将是一对一的(例如,服务与提供商),但大多数将是一对多或多对多的(公司的多个联系人将具有相同的地址)。
在这个模型中,通常会存在几个关联表,例如 client_contact、contract_addr、contact_phone、contact_email、service_provider、service_consumer 等。
假设您对给定服务的消费者的联系信息发出简单查询。除了包含数据的六个实体表之外,连接还将引用五个关联表。当然,这种查询没什么特别有趣的——我们每天都在做。
不过我突然想到:为什么不使用一个“主”关联表来保存所有关联?除了两个 PK 之外,它还需要此主表具有“关联类型”,并且所有 PK 必须具有相同的类型(整数、GUID 等)。
一方面,查询会变得更加复杂,因为每个连接都需要指定类型和 PK。另一方面,所有连接都将访问同一个表,并且通过适当的索引和缓存性能可以显着提高。
我认为可能存在描述这种方法的模式(或反模式),但没有在网上找到任何东西。有人试过吗?如果是这样,它会扩展吗?
您可以提供的任何参考资料将不胜感激。