Samlet set kan jeg ikke se nogen store fejl i dit nuværende opsætning eller skema.
Det, jeg undrer mig over, er din opdeling i 3 Bruger*-tabeller. Jeg forstår, hvad du vil have, din hensigt var (at have forskellige brugerrelaterede ting adskilt), men jeg ved ikke, om jeg ville gå med nøjagtig det samme. Hvis du planlægger kun at vise data fra User
tabel på webstedet, er dette fint, da de andre oplysninger ikke er nødvendige flere gange på samme side, men hvis brugerne skal bruge deres rigtige navn og vise deres rigtige navn (som John Doe i stedet for doe55), vil dette bremse tingene når dataene bliver større, siden du må kræver sammenføjninger. At have Preferences
seperat virker som et personligt valg. Jeg har ingen argumenter for eller imod det.
Dine mange-til-mange-tabeller behøver ikke en yderligere PK (f.eks. PostFavoriteID
). En kombineret primær af begge PostID
og UserID
ville være nok siden PostFavoriteID
er aldrig brugt andre steder. Dette gælder for alle jointabeller
Som med den forrige. svar, jeg kan ikke se en fordel eller ulempe. Jeg må sæt begge i samme tabel siden NULL
(eller måske bedre -1
) værdier ville ikke genere mig.
Jeg ville placere dem i den samme tabel ved hjælp af en trigger til at håndtere stigningen af ViewCount
bord
Du bruger et normaliseret skema, så enhver tilføjelse kan foretages til enhver tid.
Kan ikke fortælle dig, har ikke gjort det endnu, men jeg ved, at Solr er meget kraftfuld og fleksibel, så jeg synes, du burde klare dig godt.
Der er mange tråde her på SÅ diskuterer dette. Personligt kan jeg bedre lide en surrogatnøgle (eller en anden unik nummernøgle, hvis den er tilgængelig), da den gør forespørgsler nemmere og hurtigere, da en int er lettere at slå op. Hvis du tillader en ændring af brugernavn/e-mail/whatever-your-PK-is, er der massive opdateringer påkrævet. Med surrogatnøglen behøver du ikke bekymre dig.
Hvad jeg også ville gøre er at tilføje ting som created_at
, last_accessed
ved (bedst gøres via triggere eller procedurer IMO) for at have nogle statistikker allerede tilgængelige. Dette kan virkelig give dig værdifuld statistik
Yderligere strategier til at øge ydeevnen ville være ting som memcache, counter cache, partitionerede tabeller,... Sådanne ting kan diskuteres, når man virkelig bliver overrendt af brugere, fordi der kan være ting/teknologier/teknikker/... der er meget specifikke til dit problem.