我正在我的网站上创建一个成员列表,我想让他们能够通过名字和姓氏或其中之一来查找彼此。问题是,一个用户可以有多个名字,比如姓名和昵称,一个人也可以有多个姓氏,包括婚前姓氏和婚后姓氏。
一旦用户填写了他们的名字和姓氏,每个用户就可以有多个名字和姓氏,例如,可能有一个人有 3 个名字和 2 个姓氏 - 名字:Eleonora、Ela、El 和姓氏:Smith、Brown。
然后,如果有人寻找埃拉·布朗、埃莉奥诺拉·布朗、埃莉奥诺拉·史密斯或任何其他组合,他们应该找到这个人。
我的问题是,我应该如何在 sql (mysql) 中设置这一切,以便模式和搜索高效快速?不想重新发明轮子,所以我向专业人士求助并在这里提出了一个问题。
多谢你们
PS我猜标准解决方案是有一个用户表、fname表、lname表、带有userid和fnameid的userfname表以及带有userid和lnameid的userlname表,但我不确定这是否是最好的方法,并且不管搜索是否会很快...
您需要区分名字和姓氏吗?
我建议一个Users具有 和 的表UserID
,并且还有一些UsersNames表具有UserID和Name,一对多关系。
如果需要,您还可以在表IsLastName中添加一点UsersNames(或者只是一LastName列,但恕我直言,该位更好)...
但是这样您就可以搜索一个表并可以轻松找到用户 ID,而且您不限制每个用户可以拥有的名称数量。
编辑:
您可以轻松地获取输入字符串并将其拆分。因此,如果有人输入“John Smith”,您可以简单地通过拆分字符串并在子句中使用它来搜索这两个或其中一个名称,WHERE使用OR或AND取决于您的预期功能。