![]() |
![]() |
![]() ![]()
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?
![]() Będę wdzięczny za wszelką pomoc ! |
|
|
![]() |
![]()
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 -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 135 Pomógł: 1 Dołączył: 7.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Błąd w nazewnictwie
![]() 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?! |
|
|
![]()
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
-------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
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.
|
|
|
![]()
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. -------------------- Kto rano wstaje ten leje jak z cebra.
|
|
|
![]()
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
![]() |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 05:56 |