Celkově nevidím žádné velké nedostatky ve vašem aktuálním nastavení nebo schématu.
Zajímalo by mě vaše rozdělení do 3 tabulek uživatelů*. Chápu, co chcete, bylo vaším záměrem (mít různé věci související s uživateli odděleně), ale nevím, jestli bych šel s úplně stejnou věcí. Pokud plánujete zobrazovat pouze data od User
tabulka na webu, to je v pořádku, protože ostatní informace nejsou potřeba vícekrát na stejné stránce, ale pokud uživatelé potřebují používat své skutečné jméno a zobrazovat své skutečné jméno (jako John Doe místo doe55), zpomalí to věci až se data zvětší, protože můžete vyžadovat spojení. S Preferences
oddělené vypadá jako osobní volba. Nemám žádný argument pro ani proti.
Vaše tabulky many-to-many by nepotřebovaly další PK (např. PostFavoriteID
). Kombinované primární z obou PostID
a UserID
by stačilo, protože PostFavoriteID
nikde jinde se nepoužívá. To platí pro všechny spojovací tabulky
Stejně jako u předchozího odpověď, nevidím výhodu ani nevýhodu. Mohu vložte oba do stejné tabulky od NULL
(nebo možná lépe -1
) hodnoty by mi nevadily.
Umístil bych je do stejné tabulky pomocí spouštěče pro zpracování přírůstku ViewCount
tabulka
Používáte normalizované schéma, takže jakékoli doplňky lze provést kdykoli.
Nemohu vám říct, ještě jsem to neudělal, ale vím, že Solr je velmi výkonný a flexibilní, takže si myslím, že byste si měli počínat dobře.
Je jich mnoho vlákna zde na SO o tom diskutují. Osobně se mi více líbí náhradní klíč (nebo jiný jedinečný číselný klíč, pokud je k dispozici), protože usnadňuje a zrychluje dotazy, protože se snáze vyhledá int. Pokud povolíte změnu uživatelského jména/e-mailu/cokoli-vašeho-PK-je, jsou vyžadovány rozsáhlé aktualizace. S náhradním klíčem se nemusíte obtěžovat.
Co bych také udělal, je přidat věci jako created_at
, last_accessed
at (nejlépe pomocí spouštěčů nebo procedur IMO), abyste měli nějaké statistiky již k dispozici. To vám může skutečně poskytnout cenné statistiky
Další strategie pro zvýšení výkonu by byly věci jako memcache, mezipaměť čítačů, rozdělené tabulky,... O takových věcech lze diskutovat, když vás uživatelé skutečně zahltí, protože mohou existovat věci/technologie/techniky/..., které jsou velmi specifické. k vašemu problému.