С небольшим количеством изобретательности, MySQL будет делать то, что вам нужно ... Ниже приводится несколько идей, как это можно сделать.
Your table: (I call it tblPersons)
PersonID (primary key of sorts)
First
Last
Middle
Maiden
Nick
Other columns for extra info (address, whatever...)
Сохраняя таблицу как есть, и строит индекс по каждому из столбцов, связанные с именем, следующий запрос обеспечивает неэффективный, но правдоподобный способ найти все лицо, чьи имена совпадает с какими-тем определенного имени , (Джек в примере)
SELECT * from tblPersons
WHERE First = 'Jack' OR Last = 'Jack' OR Middle = 'Jack'
OR Maiden = 'Jack' OR Nick = 'Jack'
Обратите внимание, что приложение не обязано искать только одно значение имени следует искать во всех различных типах имен. Пользователь может также ввести определенный набор критериев, например, для поиска имени «Джон» и фамилии «Леннон» и «Профессия» (если такая информация хранится в db) и т. Д.
Также , обратите внимание, что даже при использовании этого подхода с одной таблицей одной из особенностей вашего приложения может быть предоставление пользователю указания в логике поиска, является ли это «заданным» именем (например, Пол, Саманта или Фатима) или «фамилия» « (например, Black, McQueen или Dupont). Основная цель этого заключается в том, что есть имена, которые могут быть либо (например, Льюис, либо Хиллари), и, будучи, по выбору, более конкретными в своем запросе, конечные пользователи могут получить SQL для автоматического отсечения многих нерелевантных записей , Мы вернемся к этой функции, в контексте альтернативной, более эффективной компоновки базы данных.
Представляем таблицу «Имена». Вместо (или дополнительно ...) хранения различных имен в таблице tblPersons мы можем ввести дополнительную таблицу. и связать его с tblPersons.
tblNames
PersonID (used to relate with tblPersons)
NameType (single letter code, say F, L, M, U, N for First, Last...)
Name
Мы бы тогда иметь одну запись в tblPersons для каждого человека, но, как много записей в tblNames, поскольку они имеют названия (но когда они не имеют определенное имя, несколько человек, например, иметь Ник, нет необходимости в соответствующей записи в tblNames).
После этого запрос стал бы
SELECT [DISTINCT] * from tblPersons P
JOIN tblNames N ON N.PersonID = P.PersonID
WHERE N.Name = 'Jack'
Такая схема/структура была бы более эффективной. Кроме того, этот вопрос позволил бы обеспечить, чтобы предложить «данную» против «фамилии» возможности легко, просто добавив к ИНЕК
AND N.NameType IN ('F', 'M', 'N') -- for the "given" names
(or)
AND N.NameType IN ('L', 'U', 'N') -- for the "surname" types. Note that
-- we put Nick name in there, but could just as eaily remove it.
Другой интерес этого подхода заключается в том, что это позволит хранить другие виды имен в там, например, SOUNDEX форма каждого имени может быть добавлена под их собственным типом (именами), что позволяет легко находить имена, даже если орфография является приблизительной.
Finaly другое усовершенствование может быть ввести отдельную таблицу поиска, содержащую наиболее распространенные аббревиатуры данных имен (Pete Питера, Джек для Джона, Билл Уильяма и т.д.), а также использовать эту для целей поиска (Столбцы имен, используемые для предоставления отображаемых значений, останутся такими, как указано в исходных данных, но дополнительный поиск/нормализация на уровне поиска приведет к увеличению отзыва).
... но разве это не точка SQL? Я не понимаю ваш вопрос. –