Sim, se houver a possibilidade, você pode colocar os dois
last, first
e first last
no banco de dados, a melhor maneira é projetar seu esquema corretamente. Se você nunca encontrar-se tentando pesquisar ou manipular partes de colunas, seu esquema quase certamente está quebrado. Quase certamente matará o desempenho.
A maneira correta é ter a tabela assim:
T1 FirstName LastName
== ========= ========
1 Pax Diablo
2 Bob Smith
3 George Jones
Então você pode dividir de forma mais eficiente o nome inserido pelo usuário (uma vez, antes de executar a consulta) em vez de tentar dividir cada nome no banco de dados.
No caso em que o banco de dados sempre mantém
last, first
, pode não ser realmente necessário para uma alteração de esquema. O problema que você tem nesse caso é simplesmente interpretar o que o usuário digitou.
Uma possibilidade, embora seja um assassino de desempenho, é fazer um
like
para cada palavra separada. Então, se o usuário digitou pax diablo
, sua consulta resultante pode ser:select T1 from mytable
where T2 like '%pax%'
and T2 like '%diablo%'
Dessa forma, você não se importa tanto com o pedido.
No entanto, dada a minha antipatia por consultas lentas, eu tentaria evitar isso, a menos que seja absolutamente necessário (ou seu banco de dados é relativamente pequeno e provavelmente permanecerá assim).
Existem várias maneiras de acelerar esses tipos de consultas, como:
- usando quaisquer recursos de pesquisa de texto completo que seu DBMS tenha.
- emulando essas habilidades extraindo e armazenando palavras durante a ativação de inserir/atualizar (e removendo-as durante a ativação de exclusão).
- no caso anterior, mas também garantindo colunas extras usadas com valores em letras minúsculas da coluna atual (para velocidade).
- dizendo ao usuário que ele precisa usar o
last, first
formulário para pesquisa. - tentando evitar o
%something%
string de pesquisa tanto quanto possível (comsomething%
, os índices ainda podem ser usados). - meu método "dividir o nome em duas colunas" mencionado anteriormente.