Over het algemeen zie ik geen grote gebreken in je huidige setup of schema.
Wat ik me afvraag, is dat je opgesplitst bent in 3 User*-tabellen. Ik begrijp wat je wilt dat je bedoeling was (verschillende gebruikersgerelateerde dingen apart hebben), maar ik weet niet of ik precies hetzelfde zou doen. Als u van plan bent om alleen gegevens weer te geven van de User
tabel op de site, is dit prima, aangezien de andere informatie niet meerdere keren op dezelfde pagina nodig is, maar als gebruikers hun echte naam moeten gebruiken en hun echte naam moeten weergeven (zoals John Doe in plaats van doe55) dan zal dit de zaken vertragen wanneer de gegevens groter worden sinds u mag joins nodig hebben. De Preferences
. hebben apart lijkt een persoonlijke keuze. Ik heb er geen argumenten voor of tegen.
Uw veel-op-veel tabellen hebben geen extra PK nodig (bijv. PostFavoriteID
). Een gecombineerde primary van beide PostID
en UserID
zou voldoende zijn aangezien PostFavoriteID
wordt nergens anders gebruikt. Dit geldt voor alle join-tabellen
Zoals bij de vorige. antwoord, ik zie geen voor- of nadeel. Ik mag zet beide in dezelfde tabel sinds de NULL
(of misschien beter -1
) waarden zouden me niet storen.
Ik zou ze in dezelfde tabel plaatsen met behulp van een trigger om de toename van de ViewCount
. af te handelen tafel
U gebruikt een genormaliseerd schema, dus eventuele toevoegingen kunnen op elk moment worden gedaan.
Ik kan het je niet zeggen, heb het nog niet gedaan, maar ik weet dat Solr erg krachtig en flexibel is, dus ik denk dat het goed met je zou moeten gaan.
Er zijn veel threads hier op SO die dit bespreken. Persoonlijk vind ik een surrogaatsleutel beter (of een andere unieke cijfersleutel indien beschikbaar), omdat het vragen eenvoudiger en sneller maakt omdat een int gemakkelijker wordt opgezocht. Als u een wijziging van gebruikersnaam/e-mail/wat uw PK ook is, toestaat, zijn er enorme updates vereist. Met de surrogaatsleutel hoeft u zich geen zorgen te maken.
Wat ik ook zou doen, is dingen toevoegen zoals created_at
, last_accessed
at (best gedaan via triggers of procedures IMO) om enkele statistieken al beschikbaar te hebben. Dit kan je echt waardevolle statistieken opleveren
Verdere strategieën om de prestaties te verhogen zijn zaken als memcache, counter-cache, gepartitioneerde tabellen,... Zulke dingen kunnen besproken worden als je echt overspoeld wordt door gebruikers, omdat er dingen/technologieën/technieken/... kunnen zijn die heel specifiek zijn voor uw probleem.