Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy moja baza danych ma sens?
Forum PHP.pl > Forum > Bazy danych > MySQL
parzol
Buduję serwis internetowy zawierający w sobie zdjęcia, wideo oraz artykuły. Zdjęcia jak i wideo mogą być dodawane zarówno przez zalogowanych jak i anonimowych użytkowników. Artykuły dodaje tylko admin. Poniżej prezentuję schemat bazy danych jaki stworzyłem. Czy jest on poprawny? Czy możecie coś zasugerować w celu poprawienia jego ewentualnej wydajności?



Będę wdzięczny za wszelką pomoc !
Sephirus
Jednej rzeczy nie kumam. tabela VIDEO ma id i video_id potem w comment masz video_id o innej długości... Coś tu jest namieszane... reszta ok

pola created_at możesz dać jako TIMESTAMP (z default = CURRENT_TIMESTAMP) dla wygody

EDIT: Co do wydajności to ciężko powiedzieć po tym schemacie - daj indeksy polom, po których będziesz szukał, sortował itd (created_at pewnie będzie użyte do sortowania na prykład)
parzol
Błąd w nazewnictwie smile.gif Nie jest pomieszane. W tabeli 'video' pole 'video_id' przechowuje ID filmu z YouTube (bo tylko one będą pokazywane). User wkleja link na frontendzie, a system wycina z niego ID filmiku i zapisuje w bazie w tym właśnie polu.

Bardziej zastanawiałem się czy nie lepiej rozbić (pod kątem poprawności) ten schemat tak, aby pomiędzy tabelami np. 'comment', a 'user' zrobić dodatkową tabelę przechodnią 'user_comment'. Tak samo z 'video' i 'image'. Przykładowo tabela 'image_user' zawierałaby 2 pola: 'image_id' oraz 'user_id' i łączyła te dwie tabele. Czy tak byłoby lepiej?!
skowron-line
pole positives, skoro positives (dodatnie) to unsigned i zmieniłbym na smallint w połączeniu z unsigned wystarczy Ci w 100%, tak samo pola added_comments, added_videos, added_images
red.orel
Tabele user oraz admin definiują dostęp do frontendu/backentu. Jeśli tak to dlaczego nie RBAC/ACL? Prawdopodobnie można komentować elementy z tabel article, image, video (kolumny article_id, image_id, video_id) - co jeśli dojdzie kolejny element. Stworzysz nową kolumnę? Lepiej dodać kolumnę identyfikującą typ zasobu bądź nową tabelę *resource*_comments (M:M). Z tematem timestamp vs datetime sam się biję od dawna (choć klasa DateTime w pewnym stopniu problem upraszcza) - pomijając Y 2K38.
tvister
Wygląda ok, ale bym tabele admin wrzucił do user tylko oflagował admina. Często admin coś komentuje lub wrzuca własne pliki.
Druga sprawa że użytkownik nie zalogowany to też uzytkownik więc powinien widniec w tabeli user.

Jest kolumna create_at to może warto dodać mod_at czyli modyfikowany. Z racji że komentarze często można edytować.

Jak dobrze rozumiem struktura komentarzy jest płaska i zależna od kolejności utworzenia?

co do pytania o tabel user_image i user_video to jeżeli uważasz ze dane tam zawarte nie będą unikalne lub w znacznym
stopni będą się duplikować to jak najbardziej.
parzol
Struktura komentarzy uzależniona jest od tego do czego jest dany komentarz. Wyciągając dane z tejże tabeli będę obserwował pola: 'article_id', 'image_id' oraz 'video_id' i w zależności od tego, które jest wypełnione będę wiedział i pobierał kolejne ważne dla mnie dane z odpowiednich już tabel. Nie wiem czy jest to najlepsze rozwiązanie, ale nic innego nie przyszło mi do głowy smile.gif
lukasz1985
W tablicy comment aby zaoszczędzić tworzenia trzech pól z kluczami obcymi stworzyłbym jedno pole ENUM z rodzajem klucza obcego (np: "video", "article", "image") i zamienił wszystkie pola z kluczami obcymi na "foreign_id".

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.