Cześć Wszystkim!
Od kilku lat jestem wiernym fanem serii videoblogów "Pasja Informatyki" na YouTubie, ale dopiero teraz udało mi się dołączyć do Waszej fantastycznej społeczności na forum. Mam nadzieję, że w przyszłości będziemy mogli dzielić się wzajemnie bogatym zasobem wiedzy i doświadczeń :)
A teraz, przechodząc do sedna, chciałbym się do Was zwrócić z następującym problemem.
W ramach zajęć przygotowuję w Javie (właściwie w Springu, z wykorzystaniem bazy MySQL) aplikację, która będzie pełniła rolę zbioru informacji nt. różnych piosenkarzy, zespołów muzycznych itd. W związku z tym każdego muzyka/zespół wyobrażam sobie jako obiekt, którego podstawowe informację zamieszczę w bazie danych.
Ale poza informacjami w bazie, chciałbym, aby do każdego profilu muzyka/zespołu można było dodawać i wyświetlać powiązane załączniki, tj. różnego rodzaju pliki - muzyczne, graficzne itp. (np. wyświetlane w formie listy załączników na dole profilu muzyka/zespołu).
Wspomnianych załączników nie chcę przechowywać w bazie, tylko na dysku serwera.
I tu pojawiają się moje pytania:
1) Czy w tym przypadku dobrym rozwiązaniem wydaje się przechowywanie adresów/linków/ścieżki do plików w tabeli w bazie danych?
Tzn. mamy dwie tabele: "musicians" i "attachements", gdzie w "attachements" znajdują się informacje o załącznikach, ścieżki do plików oraz odpowiedni klucz obcy (id muzyka/zespołu) z tabeli "musicians". Czy może jest na to jakieś lepsze rozwiązanie?
2) Jak przechowywać załączniki? Tzn.:
a) czy lepiej wszystkie załączniki umieścić w jednym folderze na dysku, np. D:/app/uploads/attachement1.jpg, D:/app/uploads/attachement2.jpg itd.?
b) czy lepiej rozmieścić je w osobnych folderach (w zależności od muzyka/zespołu), np. D:/app/uploads/kiss/attachement1.jpg, D:/app/uploads/michael-jackson/attachement1.mp3?
Przy większej liczbie artystów i ich folderów z załącznikami (rozwiązanie b) zapewne nastąpiłyby spadki wydajności aplikacji podczas wyszukiwania linków.
Dlatego co byłoby efektywniejszym rozwiązaniem?
3) Chodzi mi też o kwestie bezpieczeństwa. Czy ścieżki do plików załączników znajdujące się w bazie powinny być zahashowane?
Poza konkretnymi odpowiedziami jestem również otwarty na inne komentarze, dotyczące dobrych praktyk w kwestii wysyłania, przechowywania i operowania zuploadowanymi plikami w projektowanej aplikacji.
Z góry przepraszam, jeśli na forum znajduje się wątek na podobny temat. Niestety, niczego podobnego do tej pory nie znalazłem, dlatego założyłem własny wątek.