Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Projekt bazy danych aplikacji społecznościowych:jak mogę ulepszyć ten schemat?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL – rosyjskie znaki są wyświetlane nieprawidłowo

  2. Zapytanie dynamiczne w MySQL

  3. Jak przyznać wszystkie uprawnienia w bazie danych w MySQL?

  4. Laravel sprawdza poprawność unikatowości, jeśli identyfikator jest taki sam

  5. Dobra ochrona przed wstrzyknięciem MYSQL?