sql >> Databáze >  >> RDS >> Mysql

Návrh databáze sociální webové aplikace:jak mohu toto schéma zlepšit?

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.



  1. co je skutečnou příčinou chyby mysql 1442?

  2. zobrazit vlastní text SQL z výsledku sloupce tabulky

  3. Problém s prováděním procedury v souboru spring boot schema.sql

  4. Přihlaste se do souboru přes PHP nebo se přihlaste do databáze MySQL – co je rychlejší?