Które lepsze rozwiązanie - komentarze uzytkowników |
Które lepsze rozwiązanie - komentarze uzytkowników |
29.09.2017, 10:34:04
Post
#1
|
|
Grupa: Zarejestrowani Postów: 544 Pomógł: 5 Dołączył: 18.08.2009 Ostrzeżenie: (0%) |
Cześć, przebudowuję swojego CMSa i zastanawiam się jakie rozwiązanie będzie lepsze.
Mam tabele/sekcje news, videos, polls i w każdej z nich użytkownicy mogą dodawać komentarze. Do tej pory miałem news_comments, videos_comments, polls_comments. Nie wiem czy nie lepiej zrobić zbiorcze commnets i po prostu zrobić pole section gdzie wpisywałbym news, videos albo polls. Aktualnie mam łącznie ok. 100 000 komentarzy więc co lepsze myśląc perspektywicznie? -------------------- |
|
|
29.09.2017, 11:05:57
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Ja mam zbiorcze z polem na typ/sekcje jak to wspomniales. Dzieki temu mam zawsze jeden kod na komentarze i przy zmianie zmieniam tylko ten jeden.
Przy roznych tabelach gdy chcesz dodac nowe komentarze do czegos innego to znowu musisz tworzyc nowa tabele i sie babrac. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
29.09.2017, 11:16:42
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Również polecam 1 tabelę zbiorczą. Jest to dość wygodne rozwiązanie
|
|
|
29.09.2017, 11:17:55
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
W mysql sensowne. W innych niekoniecznie. Np Postgres 10 ma pięknie partycjonowanie danych, do tego tabele dziedziczące. Dopóki nie masz tam rekordów idących w miliony to powinien sobie dać radę silnik mysql.
-------------------- |
|
|
29.09.2017, 12:20:25
Post
#5
|
|
Grupa: Zarejestrowani Postów: 544 Pomógł: 5 Dołączył: 18.08.2009 Ostrzeżenie: (0%) |
Dzięki za odpowiedzi. Będę robił zbiorczą - działam w MySQL.
Z kategoriami zrobić podobnie? Teraz mam news_category, videos_category. Ten post edytował deha21 29.09.2017, 12:40:30 -------------------- |
|
|
29.09.2017, 12:59:41
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
tak
|
|
|
9.12.2017, 11:14:32
Post
#7
|
|
Grupa: Moderatorzy Postów: 6 070 Pomógł: 860 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
Pozwolę sobie podbić temat. W jaki sposób w przypadku takich zbiorczych tabel dbacie o integralność danych? Chodzi mi o rozwiązanie po stronie bazy danych. Pierwsza i chyba najsensowniejsza myśl jaka mi przychodzi do głowy to trigger ale może macie inne patenty. W przypadku Postgresa można przypiąć kilka trigerrow na to samo zdarzenie do jednej tabeli ale co w przypadku MySQL? Modyfikujecie ewentualny istniejący już trigger?
|
|
|
9.12.2017, 13:36:35
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
O jakiej integralności mówisz?
|
|
|
9.12.2017, 15:27:00
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Pewnie chodzi o klucze obce, których tu nie zastosujesz.
-------------------- |
|
|
9.12.2017, 18:44:14
Post
#10
|
|
Grupa: Moderatorzy Postów: 6 070 Pomógł: 860 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
Tak, chodzi mi o klucze obce, a konkretnie niedopuszczenie do sytuacji gdy istnieją komentarze do newsa, którego nie ma.
|
|
|
9.12.2017, 18:57:43
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
A jak ta tabela wygląda konkretnie? Bo newsy z komentarzami to zazwyczaj
newsy: id, cośtam komentarze: id, id_newsa Naprawdę trzeba się bardzo postarać żeby to zostawić luzem (bo nie widzę zastosowania żadnego do ustawiania null na on delete). -------------------- |
|
|
9.12.2017, 21:50:05
Post
#12
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
W mysql też da się ustawić kilka triggerów na 1 tabelę na to samo zdażenie np. BEFORE INSERT.
I tutaj to jest chyba jedyne sensowne rozwiązanie tylko że tutaj musisz ustawiać trigger nie na comments a na tabelę która będzie źródłem np. news. |
|
|
10.12.2017, 01:47:10
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
Polecam używanie ORMa a tego typu problemy całkowicie znikają. Można nawet ustawić, by komentarze do artykułów to były inne obiekty niż do blogów a i tak wszystko zamapować na jedną tabelę - jak kto lubi. Rozstawianie po kątach sierot? orphanRemoval=true i problem znika.
|
|
|
10.12.2017, 09:03:33
Post
#14
|
|
Grupa: Moderatorzy Postów: 6 070 Pomógł: 860 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
@viking:
Mówimy tutaj o 1 tabeli z komentarzami do X obiektów (tabel) wiec klucza obcego nie postawisz. @Pyton: Fakt, od 5.7.2 można ustawić kilka triggerow - wow, w końcu ktoś odkrył taka możliwość! I to wg mnie rozwiązuje problem w sposób wygodny i elegancki. @Pilsener: Mi chodziło o zadbanie o to po stronie bazy danych, a nie aplikacji. Zdarza sie przecież ze jest potrzeba ingerencji w dane z poziomu bazy z pominięciem aplikacji wiec to sama baza powinna pilnować spójności danych. |
|
|
10.12.2017, 11:25:30
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Czyli np mialbys tabele artykułów i wiadomości a komentarze linkuja do pk obu tabel? I gdzieś jeszcze kolumna z typem tabeli (czy artykuły, czy wiadomości)?
-------------------- |
|
|
10.12.2017, 16:29:53
Post
#16
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Tutaj ciekawostka jak to jest rozwiązanie na poziomie ORM/Eloquent w Laravel:
https://laravel.com/docs/5.5/eloquent-relat...rphic-relations Ale nie powiem - również lubię mimo wszystkie mieć porządnie zrobione klucze bo to jest zawsze druga linia zabezpieczeń aby nie mieć bałaganu w bazie. ORM o to zadba tylko wtedy gdy się nie pomylimy, zapytania wykonają się zawsze wszystkie i do końca itd. Poza tym klucze to też pewnie jakiś zastrzyk optymalizacji no i już taka trywialna korzyść, phpmyadmin linkuje fajnie ID do wiersza -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 23:58 |