CREATE TABLE KLIENCI
(
ID_KLIENTA NUMBER(10) NOT NULL,
IMIE VARCHAR2 (50 CHAR) NOT NULL,
NAZWISKO VARCHAR2 (100 CHAR) NOT NULL
...................
)
Czy to już wystarczy do poprawnego wyszukiwania klientów np Anny Kowalskiej?? Jeszcze niestety nie.
W jaki sposób mogą zostać zapisane te dane:
Anna Kowalska
ANNA KOWALSKA
AnnA KoWalskA
anna Kowalska
Anna KOwalska
Możliwości jest wiele. Problem opisany przez mnie dotyczy standaryzacji danych tekstowych...Ten aspekt należy ustalić już sobie na etapie projektowania systemu. - w jaki sposób standaryzujemy istotne dane tekstowe, a w tym przypadku, czy imiona i nazwiska klientów zapisujemy:
- dużymi literami
- bez niewidocznych znaków wiodących i kończących w polach imienia i nazwiska oraz znaków interpunkcyjnych
- czy dodajemy dodatkowe sprawdzenia na poziomie bazy danych np.
- CHECK (IMIE = UPPER(TRIM(IMIE) ) )
- lub CHECK (IMIE = INITCAP(TRIM(IMIE) ) )
- znaki interpunkcyjne można wyłowić za pomocą wyrażeń regularnych
Do czego to prowadzi??
- Otrzymujemy złożone i wolne zapytania jak np. poniżej
- Instrukcja REGEXP_REPLACE(IMIE, '[^[:alpha:]]', '') służy do wycinania znaków, które nie są literami (dla złożonych wieloczłonowych nazwisk może być problem)
- Uważny Czytelnik dostrzeże, że funkcja TRIM jest niepotrzebna i spełnia tylko rolę przejaskrawiającą
- Nawet takie poplątane zapytania mogą pokrywać jedynie większość danych, ale może istnieć wiele błędnych przypadków, których nie jesteśmy w stanie przewidzieć
- Wyszukiwanie będzie działać szybciej, jeśli będą założone zwykłe indeksy po imieniu i nazwisku, stosowanie funkcji konwertujących będzie przeczesywać cała tabelę i generować niepotrzebne obciążenie
- Zapytania staną się prostsze i szybsze. Zapytanie poniższe będzie wystarczające:
- Indeks po nazwisku zapewni range scan zamiast full scan
- Wyniki raportów będą wymagały mniejszej standaryzacji
- Standaryzacja zmniejsza koszty utrzymania systemu
- zesłownikować imiona, żeby była tylko Anna, a nie Anka lub Ańka lub Ania. Najczęściej występujące imiona da się zebrać w słowniku , a na formatce przy polu imię można wprowadzić checbox ,., którego odznaczenie wyłączy walidację imion ze słownikiem. Ciągle pojawiają się nowe serialowe inspiracje oraz imiona zagraniczne, których nie da się uwzględnić. Ale mimo wszystko są to sytuacje wyjątkowe