Мне нужно иметь возможность искать возможные «псевдонимы» для заданного имени, но не могу понять, как правильно их хранить.
Например, допустим, что все перечисленные ниже формы имеют одно и то же имя:
Elizabeth, Eliza, Bessie, Beth, Betsy, Betty, Libby, Liza, Lisa, Liz, Lizzie
Если пользователь наберет "Beth", я бы хотел получить все остальные псевдонимы из этого "набора".
Использование 20 (или более!) Столбцов с именем "Nickname1, Nickname2,..."
кажется очень плохой идеей.
С другой стороны, ни одна из них по своей сути не будет основной записью других, поэтому нет ясного способа сделать ее реляционной / иерархической.
Я думал, что добавление столбца "GroupID"
может сработать, а затем присвоить все имена в «наборе» тому же GroupID
, но поле GroupID
не будет иметь никакого другого значения, кроме группировки, и получение набора псевдонимов всегда требует вложенного запроса, например:
SELECT Name FROM Nicknames WHERE GroupID = (SELECT GroupID FROM Nicknames WHERE Name = 'Beth')
Не говоря уже о том, что для эффективной работы обоих столбцов в таблице должны быть свои собственные отдельные индексы.
Я что-то упустил? Кажется, это должно быть легко, но я не могу сегодня об этом думать.
(я использую SQL Server, но вопрос довольно общий, поэтому я не обозначил его как таковой).