Ano, pokud existuje možnost, můžete dát obojí last, first
a first last
do databáze, lepší způsob je správně navrhnout schéma.
Pokud někdy zjistíte, že se pokoušíte vyhledávat části nebo s nimi jinak manipulovat sloupců, vaše schéma je téměř jistě nefunkční. Téměř jistě to zabije výkon.
Správný způsob je mít tabulku takto:
T1 FirstName LastName
== ========= ========
1 Pax Diablo
2 Bob Smith
3 George Jones
Potom můžete efektivněji rozdělit jméno zadané uživatelem (jednou, před spuštěním dotazu), než se snažit rozdělit každé jednotlivé jméno v databázi.
V případě, že databáze vždy platí last, first
, ve skutečnosti to nemusí být nutné pro změnu schématu.
Problém, který máte v tomto případě, je jednoduše problém s interpretací toho, co uživatel zadal.
Jednou z možností, i když je to zabiják výkonu, je udělat like
pro každé samostatné slovo. Pokud tedy uživatel zadal pax diablo
, váš výsledný dotaz může být:
select T1 from mytable
where T2 like '%pax%'
and T2 like '%diablo%'
Tímto způsobem se o pořadí tolik nestaráte.
Nicméně vzhledem k tomu, že nemám rád pomalé dotazy, pokusím se tomu vyhnout, pokud to není nezbytně nutné (nebo je vaše databáze relativně malá a pravděpodobně taková zůstane).
Existují různé způsoby, jak urychlit tyto druhy dotazů, například:
- pomocí všech možností fulltextového vyhledávání, které má vaše DBMS.
- emulace těchto schopností extrahováním a ukládáním slov během spouštěčů vkládání/aktualizace (a jejich odstraňováním během spouštěčů mazání).
- předchozí případ, ale také zajištění dalších sloupců používaných s hodnotami aktuálního sloupce psanými malými písmeny (kvůli rychlosti).
- sdělit uživateli, že musí použít
last, first
formulář pro vyhledávání. - snaží se vyhnout
%something%
hledejte řetězec co nejvíce (ssomething%
, indexy lze stále používat). - má dříve zmíněná metoda „rozdělit název do dvou sloupců“.