Ogólnie rzecz biorąc, nie widzę żadnych dużych wad w twojej obecnej konfiguracji lub schemacie.
Zastanawia mnie Twój podział na 3 tabele użytkowników*. Dostaję to, czego chcesz, aby twoje intencje były (oddzielanie różnych rzeczy związanych z użytkownikiem), ale nie wiem, czy poszedłbym z dokładnie tym samym. Jeśli planujesz wyświetlać tylko dane od User
tabeli na stronie, jest to w porządku, ponieważ inne informacje nie są potrzebne wielokrotnie na tej samej stronie, ale jeśli użytkownicy muszą użyć swojego prawdziwego imienia i nazwiska i wyświetlić swoje prawdziwe imię (np. Jan Kowalski zamiast kowalski55), to spowolni to działanie kiedy dane stają się większe, ponieważ możesz wymagają sprzężeń. Posiadanie Preferences
oddzielne wydaje się być osobistym wyborem. Nie mam argumentów za ani przeciw.
Twoje tabele wiele do wielu nie będą wymagały dodatkowego PK (np. PostFavoriteID
). Połączona podstawowa z obu PostID
i UserID
wystarczy, ponieważ PostFavoriteID
nigdy nie jest używany nigdzie indziej. Dotyczy to wszystkich dołączonych tabel
Jak w przypadku poprz. odpowiedź, nie widzę korzyści ani wad. może umieść oba w tej samej tabeli, ponieważ NULL
(a może lepiej -1
) wartości nie przeszkadzałyby mi.
Umieściłbym je w tej samej tabeli za pomocą wyzwalacza do obsługi przyrostu ViewCount
stół
Używasz schematu o normalnej wielkości, więc wszelkie dodatki można wykonać w dowolnym momencie.
Nie mogę ci powiedzieć, jeszcze tego nie zrobiłem, ale wiem, że Solr jest bardzo potężny i elastyczny, więc myślę, że powinieneś sobie radzić.
Jest wiele wątki tutaj na SO omawiają to. Osobiście bardziej podoba mi się klucz zastępczy (lub inny unikalny klucz numeryczny, jeśli jest dostępny), ponieważ sprawia, że zapytania są łatwiejsze i szybsze, ponieważ łatwiej jest wyszukać int. Jeśli zezwolisz na zmianę nazwy użytkownika/e-maila/czegokolwiek-twój-PK-jest, wymagane są ogromne aktualizacje. Z kluczem zastępczym nie musisz się martwić.
Chciałbym również dodać takie rzeczy jak created_at
, last_accessed
w (najlepiej za pomocą wyzwalaczy lub procedur IMO), aby niektóre statystyki były już dostępne. To naprawdę może dać ci cenne statystyki
Dalszymi strategiami zwiększania wydajności byłyby takie rzeczy jak memcache, licznik pamięci podręcznej, partycjonowane tabele,... Takie rzeczy można omówić, gdy naprawdę jesteś przepełniony przez użytkowników, ponieważ mogą istnieć rzeczy/technologie/techniki/... które są bardzo specyficzne do twojego problemu.