zzeus
15.11.2008, 13:59:17
Witam, załóżmy że projektujemy bazę danych dla sklepu internetowego, i mamy tablicę z danymi użytkownika a w niej pola typu kraj, miasto, ulica, kod pocztowy. Lepiej takie pola trzymać dla każdego użytkownika w formie tekstowej, czy tworzyć tabele słownikowe a w tabeli z danymi użytkownika trzymać tylko powiązane id. Zaletą jest większa czytelność, ale z drugiej strony przy wyciąganiu danych z bazy rośnie złożoność zapytań. Co Wy o tym sądzicie ?
Pozdrawiam
vokiel
15.11.2008, 15:21:10
Jeśli chodzi o dane, które się często nie zmieniają to lepiej zrobić to w oddzielnyc tabelkach. Przykładowo kraj.
Dzięki temu możesz utworzyć liste rozwijalną z ich listą, wtedy użytkownik już tylko wybiera dany kraj (podczas tworzenia listy możesz ustawić zaznaczenia na wybrany kraj, tak, że wstępnie określasz z jakiego kraju użytkownik pochodzi i wybierasz ten kraj).
Jeśli chodzi o miasta, to już jest gorzej, bo odnośnie Polski to jeszcze luz, ale jakbyś chciał to rozszerzyć na inne kraje, to się robi spora baza. Możesz ewentualnie stworzyć liste miast w pl, a jeśli nie w pl to niech wpisują z palca.
Ogólnie uważam, że lepiej jak użytkownik wybiera z przedstawionych opcji, rejestracja jest szybsza, przyjemniejsza, i poprawniejsza.
W pole kraj mozna wpisac np: PL, Polska, Poland etc., a jak masz listę rozwijalną z wypisanymi krajami to wybierzesz to co masz do wybrania. Zapisujesz do bazy id kraju, a nie tekst, działa szybciej, i wyszukiwanie będzie szybsze.
No ale odnośnie innych pól (poza krajem) to uważam, że lepiej niech to będzie wpisywane z palca, bo tych danych jest za dużo, żeby to przechowywać. Najprawdopodobniej nieproporcjonalnie do ilości wykorzystanych. Przykładowo wpiszesz nazwy 5tys miast, a użytkowników będziesz mial z 30 różnych, wtedy nie zaoszczędzisz miejsa w bazie, nie zwiększysz szybkości.
Ewentualnie możesz zapisywać takie rzeczy na bieżąco. Co mam na myśli? Ktoś wpisuje miejscowość (kod, ulica etc), a Ty sprawdzasz czy taki już istnieje, jeśli nie to tworzysz nowy i zapisujesz jego id w tabeli usr, a jesli istnieje to pobierasz te id i je dodajesz. Wtedy unikasz redundancji danych, i nie przeładowujesz tabel niepotrzebnymi danymi, których nie wykorzystasz.
Dodatkowo byś mógł się pobawić w ajaxowe podpowiadanie pól z danych już wpisanych w bazie, dzięki czemu wpisy będą podobniejsze.
zzeus
15.11.2008, 17:28:35
No właśnie myślałem o czymś takim, że użytkowniki wpisuje dane w wersji tekstowej, ja sprawdzam czy w moich tabelach słownikowych takowe miasta, ulice itd. się znajdują, jeśli nie to dodaje rekordy to tablic słownikowych i dostaje nowe id które zapisuje w tabeli z danymi użytkownika.
Ajax i podpowiadanie ok, ale to w wersji rozwojowej