sql >> Database teknologi >  >> RDS >> Mysql

Social webapplikationsdatabasedesign:hvordan kan jeg forbedre dette skema?

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 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 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.



  1. Docker php_network_getaddresses fejl

  2. Hvordan kalder man Oracle Stored Procedure i Python?

  3. Hvorfor er eksekveringen langsom i Python MySQLdb?

  4. Sender array gennem AJAX fra php til javascript