Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Projektowanie bazy danych
Forum PHP.pl > Forum > Bazy danych
zzeus
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
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
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 smile.gif
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.