Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zaprojektowac schemat bazy
Forum PHP.pl > Forum > Bazy danych
Yatta
Mam do zrobienia profil uzytkownika. Uzytkownik moze zaznaczyc od 1 do 200 checkboxow. I wrzucanie tego w jeden wiersz raczej odpada. Wiec robie dodatkowa tabele i tam laduja wszystkie wartosci w pojedycznych wierszach.
I teraz pytanie , jak rozwiazac update profilu? Czy kasowac wszystkie rekordy i dodawac nowe czy raczej sprawdzac ktore sie zmienily i aktualizowac?
phpion
Możesz bawić się w sprawdzanie, z których checkboxów użytkownik zrezygnował (np. poprzez zapis do ukrytego pola w JS podczas odznaczania). Jednak będziesz miał z tym kupę zabawy (np. obsługa: odznaczył ale zaznaczył ponownie). Najprościej wywalać wszystkie rekordy z tej tabeli i wrzucać na nowo przy każdej zmianie danych.
dr_bonzo
Prostsze do wykonania jest usuniecie + dodanie. To tylko 2 zapytanka DELETE + INSERT (o ile stosujesz multi insert).
A updatowanie - select + update kazdego z [ ] z osobna
Yatta
OK tylko tu pojawia sie problem pola primay key z autoincrement. Zalozmy 200-300 kont po 200 pol. I kazdy co jakis czas bedzie edytowal profil. Czy to nie grozi przepelnieniem wartosci autoincrementa? O to sie glownie obawiam
phpion
Źle to przemyślałeś. Schemat tabel powinien wyglądać tak:

user: id, username...
choice: id, name...
user_choice: user_id, choice_id

Podkreślenie oznacza klucz główny. Jak widzisz tabela user_choice posiada klucz główny składający się z dwóch kolumn. Nie potrzebujesz do niej dodatkowe pola typu AUTO_INCREMENT. Usunięcie wszystkich wyborów danego użytkownika (przy operacji ponownego zapisu) będzie trwało szybciutko, a to za sprawą skorzystania z klucza głównego (nie musisz już tworzyć indeksu).
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.