zzeus
9.08.2010, 19:55:51
Witam,
pisząc sobie panel do zarządzania pewną stroną natknąłem się na następujący problem - przechowywanie informacji o plikach. Mamy np. artykuły do których możemy dodać pliki, aktualności do których możemy dodać pliki, opisy produktów do których możemy dodać pliki, itd.
W jaki sposób przechowywać informacje o tych plikach ? Stworzyć jedną tabelę, w której będą zapisane wszystkie informacje, i następnie za pomocą tablic pośrednich łączyć te pliki z artykułami, aktualnościami, produktami ... czyli np. tablica_pliki (id, nazwa, ...) oraz tablica_pliki_artykuly (id_artykul, id_plik), tablica_pliki_aktualnosci (id_plik, id_artykul) ... czy tworzyć osobne tablice na pliki, np. artykuly_pliki (id_plik, id_artykul, nazwa, ...), aktualnosci_pliki (id_plik, id_aktualnosc, nazwa, ...) ?
Jak dla mnie to można to robić na kilka sposobów. Wszystko zależy od ilości konkretnych danych. Jeśli przewidujesz dużo w każdej kategorii, to lepiej moim zdaniem osobne tabele. Jeśli mało to jedna tabela i kolumna z typem. Można jednak jeszcze inaczej podejść. Po prostu użyć do tego struktury katalogów. Każda kategoria i artykuł/news/co tamchcesz miały by odwzorowanie w strukturze katalogów. Jeśli skrypt miałby więc artykuł o id 285 to listowałby katalog /media/artykul/285/ (lub coś podobnego) i jeśli byłyby tam pliki to wiadomo - zrobić z nich linki a dodatkowo dołączyć plik opisu, który mógłby się ta znajdować. Pomysłów jest więc więcej niż tylko obecnie modne "pchamy wszystko do bazy"
zzeus
9.08.2010, 20:44:43
Dużo - mało plików, jakie to są rzędy wielkości ?

Jeśli chodzi o odwzorowanie kategorii w strukturze katalogów, to jak to wygląda pod względem wydajności ? Sprawdzenie w bazie czy plik istnieje, i sprawdzenie czy dany katalog zawiera jakieś pliki ? W sumie częściowo już takie odwzorowanie posiadam, bo np. dany produkt posiada swój katalog produkty/id_produktu do którego wrzucam pliki z nim powiązane. Jeśli jednak będę chciał wyświetlić listę artykułów z informacją o plikach powiązanych z nimi, to będę musiał listować ileś tam katalogów, czy to nie będzie obciążeniem ?
Ja osobiście bym się nie bawił w podawanie od razu plików dla grupy artykułów. To moim zdaniem niepotrzebne i nieco nielogiczne. User nie będzie i tak chciał zazwyczaj pobierać plików skoro nie zna i tak treści. Dopiero po zapoznaniu się z nią może ocenić, czy plik chce ściągnąć czy też nie. Stąd widok listy nie powinien tej inforacji zawierać. Poza tym niejako zmuszasz usera do przeglądania tych artykułów. Nie powinno się dawać takich rzeczy wprost na tacy
zzeus
10.08.2010, 07:25:03
Z tymi artykułami to tylko przykład

oczywiście przy artykułach to nie ma większego sensu, ale są działy w których jest mi to niezbędne.
thek
10.08.2010, 10:20:18
Moim zdaniem postawienie na system plików ( by sprawdzał ) jest ciut bezpieczniejsze, ponieważ baza tylko przechowuje informację o pliku, ale to struktura określi czy ścieżka jest prawidłowa i plik faktycznie istnieje. Baza zawsze może gdzieś się walnąć, czas żądania się skończy przedwcześnie i mamy fałszywe dane. Zapytanie aktualizujące poleci w kosmos, a wyniki w bazie będą niezgodne ze stanem faktycznym. Poza tym chyba nie walisz na stronie kilkuset wyników? Zapewne paginujesz do kilkunastu. Różnica jakąś będzie, ale przy takim ograniczenie nie jakaś zauważalna..