Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prosiłabym o odpowiedź na 4 konkretne pytania.
Forum PHP.pl > Forum > Bazy danych
jolam
1 Czy jak mam w bazie strukturę drzewkaIP to na dysku też powinnam mieć taką strukturę katalogów do trzymania w nich plików, które nie mogą być w bazie? Czy może wygodniej mieć jeden katalog "BazaDanych" a w nim podkatalogi o nazwach np "numerID_skrócona_nazwa"? Bo tak sobie myślę, że mogłabym oszczędzić trochę czasu na wchodzeniu w strukturę katalogów i jej kolejne poziomy wykorzystując takie bardziej płaskie rozwiązanie. Ale tracę też troszkę czytelności i może coś jeszcze o czym nie wiem. Co wybrać?

2 Co powinno być pierwsze wpis w bazie czy katalog na dysku? Teraz najpierw mam katalog ze obrazami i potem dodaje wpis. Ale może lepiej najpierw dodawać wpis do bazy a później jakiś skrypt samemu utworzy katalog? Ale co wtedy z dodawaniem obrazów? Poprzez formularz? Wczytuję plik i skrypt ma go umieścić w odpowiednim katalogu? Tylko wtedy, jeśli obraz pochodzi z sieci to najpierw muszę go zapisać na dysku i dopiero otem dodać poprzez formularz. Teraz jak najpierw mam katalog na dysku to od razu do niego zapisuję plik z sieci. Co wybrać, jak będzie lepiej na dłuższą metę?

3 Czy da się uniknąć powtarzania danych w tabelach bazy? Np jak chce mieć tagi to mam tabelę tagów a w niej kolumny: id, tag. I jak jeden id ma kilka tagów to wtedy muszę na to poświęcić ileś wierszy. Czy da się to zmienić, czy lepiej zostawić?

4 Nie umiem sobie poradzić z dziedziczeniem np tagów. Mam takie zapytanie:
  1. $q = sqlite_query( $base, "
  2. SELECT id, parentid, depth FROM '$tab' ORDER BY depth ASC
  3. ");
  4. while( $r = sqlite_fetch_array( $q, SQLITE_ASSOC) )
  5. {
  6. $id = $r['id'];
  7. $parentid = $r['parentid'];
  8. $depth = $r['depth'];
  9. if( $depth != 0 )
  10. {
  11. $q = sqlite_query( $base, "
  12. SELECT f FROM '$tab'
  13. WHERE id = '$parentid' AND f IS NOT NULL
  14. ");
  15. $parentf = sqlite_fetch_single( $q );
  16. $q = sqlite_query( $base, "
  17. UPDATE '$tab'
  18. SET f = '$parentf
  19. WHERE id = '$id' AND f IS NULL
  20. ");
  21. }
  22. }


Wiecie czemu to nie działa? Powinno pobierać niezerowy tag od rodzica i przypisać go potomkowi. Ale nie działa. A może jakoś inaczej trzeba podejść do takich dziedziczonych zagadnień?


pozdrawiam Jola
Spawnm
Proszę dodać BBcode.
jolam
Spawnm już poprawiłam. Mógłbyś mi teraz pomóc z tymi 4 pytaniami?

Zapomniałam jeszcze o jedno spytać. Jak tworzę formularz który dodaje zdjęcia do różnych pozycji w bazie, to czy lepiej te zdjęcia wgrywać na serwer właśnie poprzez formularz i potem skrypt je przenosi do odpowiendiej lokalizacji. Czy może lepiej ustalić jakiś katalog tymczasowo, do niego wgrywać dodawane zdjęcia. I potem automatycznie skrypt by je przenosił do odpowiedniego katalogu. Czyli pomijałabym wybieranie pliku za pomocą formularza. Czy tak byłoby lepiej?

pozdrawiam Jola
andycole
2. Jezeli nazwa pliku ma byc zalezna od id (autoinkrementacja) rekordu w bazie to najpierw zapis do bazy pozniej pliku. W przeciwnym wypadku wg mnie lepszym rozwiazaniem wydaje sie byc zapis pliku, pozniej dopiero do bazy. Wtedy gdy zapis pliku sie nie powiedzie, nie zapisujemy do bazy i po problemie.

3. Robisz dwie tablice glowne:

tagi:
id|nazwa_taga

artykuly (lub cos innego co chcesz tagowac):
id|tytul|autor|data

i tworzysz tabele pomocnicza (tzw relacja wiele do wielu tabel tagi i artykuly):

tagi_artykuly:
id_taga|id_artykulu


Wtedy zakladajac ze artykul o id=8 ma przypisane tagi o id=5, id=99, id=44 bedziemy mieli w tabeli tagi_artykuly 3 rekordy:
5|8
99|8
44|8

Do wyciagniecia informacji nt tagow powiazanych z danym artykulym korzystasz z JOIN'a.

To jest chyba najlepszy sposob na tagi.

Ogolnie zasada jest taka, ze normalizujac tabele bazy danych dazymy do tego zeby pola ktore sie powtarzaja wyciagac do osobnych tabel. Poczytaj o zasadach normalizacji baz danych.

http://gryf.mif.pg.gda.pl/~mate/wyklady/bazy/podstawy.html
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.