- W SQLu dodaj sobie tabelkę: DEKLINACJA (ID_ODMIANY, M, D, C, B, N, MS, W) i tam trzymaj deklinację wyrazów. (M - mianownik, D - dopełniacz itd.)
(1,'fizyka','fizyki','fizyce','fizykę','fizyką','fizyce','fizyko'),
...
W Przedmiotach możesz mieć klucz obcy do deklinacji i stamtąd wyciągasz sobie formę, której potrzebujesz:
PRZEDMIOT (ID_PRZEDMIOTU, NAZWA, ID_ODMIANY)
(1,'fizyka',1)
...
Zapytania mogłyby wyglądać tak:
SELECT
P.ID_PRZEDMIOTU,
'NIE LUBIĘ '||D.D
FROM
PRZEDMIOT P JOIN DEKLINACJA D ON P.ID_ODMIANY=D.ID_ODMIANY
WHERE P.NAZWA='fizyka'
;
- Alternatywnie możesz iść w minimalizm i "hardkodować" odmianę:
SELECT
'Nie lubię '||DECODE(wyraz,'fizyka','fizyki','matematyka','matematyki',....)
FROM ...
Szybkie i proste, ale mało elastyczne.
- Możesz stworzyć funkcję (PL/SQL), która zwróci Ci odmianę i mieć logikę typu:
a) Jak jest w słowniku -> zwróć wartość za słownika
b) Jak nie ma w słowniku -> zaaplikuję heurystykę
Daje to możliwość definiowania heurystyki typu:
a) jak kończy się na "ka", to zamień na "ki" (fizyka -> fizyki)
b) jak kończy się na "er", to zamień na "era" (komputer -> komputera, bohater -> bohatera)
...
Słaba ta heurystyka, bo będzie generować bzdury: pieska (pogoda) -> pieski (pogody), swet"er" -> swet"era" ...
Za to tabelka słownikowa pozwoli Ci dodać masę wyjątków. Dla bazy trzymanie "dużej ilości czegoś" nie jest jednak problemem.