Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CI]wydajność DB, relacyjny słownik
Forum PHP.pl > Forum > PHP > Frameworki
zephyr7
Jak najlepiej zrobić w CI w pełni funkcjonalny słownik,

co lepsze (z punktu widzenia wydajności, obciążenia systemu, szybkości działania, obszerności kodu):

1) skonstruować go zgodnie z zasadami dobrego projektowania baz danych, np:

jezyki (id,nazwa)
slowa (id,slowo)
slowa_kategorie(id,slowo_id, kategoria_id)
slowa_jezyki(id,slowo_id,jezyk_id)
slowa_pary(id,slowo1,slowo2) (np. cat=kot)

2) czy też, lepiej pójść na łatwiznę i zrobć tak:

slowa(id,slowo, jezyk,kategoria)

---

W pierwszym przypadku, aby wszystko działało trzeba 1) albo tworzyć jedno, niesłychanie długie zapytanie SQL, albo podzielić je na mniejsze, np. ok 5 w przypadku dodawania nowego slowa smile.gif)) Mało tego, jakikolwiek błąd w SQL, jakakolwiek nieścisłość w w/w modelu, powoduje "wysypanie się" całego systemu... Który zresztą jest niesłychanie trudny do ogarnięcia, jeśli obsługujemy np. 4 języki, po kilka kategorii w każdym....

W drugim przypadku, wszystko jest prostsze do zrozumienia i ogarnięcia, ale tabela ze słowami puchnie i puchnie...

Które rozwiązanie jest lepsze, szybsze i bardziej "godne" zawodowego programisty?questionmark.gifquestionmark.gif

ps. pytanie umieściłem w dziale frameworki, ponieważ projekt będzie wykorzystywał active records z CI

pedro84
Pierwsze, ale z tego co mi się wydaje to skopałeś projekt bazy - z resztą, nie znamy funkcjonalności dokładnej.
zephyr7
Już wyjaśniam:

mamy 4 języki (ang, pol, hiszpański, rosyjski)

Użytkownik loguje się i mając do wyboru dwie listy rozwijane (język1, język2), tworzy sobie kategorie, np.

języki POL-ANG, kategoria: zwierzęta - tam dodaje sobie słówka (kot-cat, dom-house, itp.), albo
ESP-RUS, kategoria ssaki - i przykładowe słówka (gato-kot, cholera wie, jak to jest po rusku)...

Założenie jest takie, że wszystkie słowa są w jednej tabeli WORDS z parametrem UNIQUE,
czyli unikamy powtórzeń. Wszystkie relacje słowo-słowo (czyli, np. pies-dog) są w tabeli word_pairs

I tutaj zaczyna się droga przez mękę:

jeśli słowo istnieje na liście, bo było użyte w kategorii np. zwierzęta, to nie dodajemy go ponownie, ale dodajemy wpis w tabeli word_pairs.... I tak samo z językami, kategoriami, itp.

Podobne przeboje są z kasowaniem.

Teoretycznie wszystko jest proste i ładne, ale...

przykładowe problemy:

1) słowo identyczne z definicją (np. hit-hit) - DISTINCT zwykle rozwiązuje sprawę
2) nieistniejące pary, czyli np. dom(POL)-house(ANG) i zaraz house(POL!!!)-dom(ANG)
3) to samo, co wyżej, tylko w różnych kategoriach, np. dom(POL)-house(ANG) w kategorii BUDYNKI i house(POL!!!!)-dom(ANG) w KATEGORII NR 2 - efekt? hehe, w zależności od zapytania, np.:

dom-house
house-dom

w kategorii BUDYNKI

Czy nie prościej po prostu dać każdemu użytkownikowi osobną tabelkę, np.USR_TBL_21, o następujących polach: id, słowo, definicja, język, kategoria?questionmark.gif
Każdy user miałby swój 'zeszycik', gdzie mógłby się dowolnie wyszaleć ze słowami - a jakiekolwiek większe błędy nie miałyby wpływu na funkcjonowanie całości?

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.