Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy moja baza danych ma sens?
parzol
post
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 1
Dołączył: 7.05.2005

Ostrzeżenie: (0%)
-----


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?

(IMG:http://i.stack.imgur.com/EDua1.png)

Będę wdzięczny za wszelką pomoc !
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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)

Ten post edytował Sephirus 12.12.2012, 16:46:23
Go to the top of the page
+Quote Post
parzol
post
Post #3





Grupa: Zarejestrowani
Postów: 135
Pomógł: 1
Dołączył: 7.05.2005

Ostrzeżenie: (0%)
-----


Błąd w nazewnictwie (IMG:style_emoticons/default/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?!
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
red.orel
post
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 9
Dołączył: 3.02.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
tvister
post
Post #6





Grupa: Zarejestrowani
Postów: 253
Pomógł: 29
Dołączył: 18.08.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
parzol
post
Post #7





Grupa: Zarejestrowani
Postów: 135
Pomógł: 1
Dołączył: 7.05.2005

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
lukasz1985
post
Post #8





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


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".



Ten post edytował lukasz1985 12.12.2012, 21:07:38
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 19:33