我需要一些建议。我有一个项目,将用户存储在数据库中,并确定何时两个或更多用户实际上是同一个人。因此,如果我注册了鲍勃、乔、汤姆、山姆、弗雷德和露西,后来发现(通过入院或其他方式)乔、汤姆和露西实际上是同一个人,我想记录这种关系,这样,如果我搜索其中任何一个,其他的名字或“别名”也会出现,不管联系如何。
在不同的时间可以知道tom=lucy,然后joe=lucy,或者joe->tom->lucy是线性的,但是如果我搜索lucy,tom和joe都会显示为连接或别名,反之亦然。
只是想在用户表的设置上找到一些想法,这样就可以通过一个简单的搜索查询实现这一点,而无需使用手工填写的额外“别名”字段来建立连接(例如,将每个连接用户的组合放入一个字符串字段是一个糟糕的例子)。子表关系是我目前正在思考的问题。不知道如何在不生成重复的手动数据输入的情况下以最佳方式进行。
伪sql很好。主要是想产生如何最好地实现这一点的想法。感谢您的预先输入!
1条答案
按热度按时间agxfikkp1#
这本质上是一个连接组件的问题。把数据想象成一个无向图,其中顶点是人,边表示别名。我们希望找到连接的组件,并在添加新边(别名)时更新它们。
我们可以有一个名字表和一个额外的
alias
列,其值表示相应行所属的组件。最初,每个人都将在自己的组件中(alias
最初将是唯一的)。当一个别名出现在说人之间时A
以及B
是要建立的,我们更新alias
所属组件中所有人员的列B
(或A
)价值alias
列A
(或B
). 这将合并组件。下面是一个sql fiddle查询的工作示例。