sql >> Base de Datos >  >> RDS >> Mysql

Diseño de base de datos de aplicaciones web sociales:¿cómo puedo mejorar este esquema?

En general, no veo grandes fallas en su configuración o esquema actual.

Lo que me pregunto es su división en 3 tablas de Usuario *. Obtengo lo que quiere que sea su intención (tener diferentes cosas relacionadas con el usuario por separado), pero no sé si elegiría exactamente lo mismo. Si planea mostrar solo datos del User table en el sitio, esto está bien, ya que la otra información no se necesita varias veces en la misma página, pero si los usuarios necesitan usar su nombre real y mostrar su nombre real (como John Doe en lugar de doe55), esto ralentizará las cosas cuando los datos aumentan ya que puedes requieren uniones. Tener las Preferences Separado parece una elección personal. No tengo ningún argumento a favor ni en contra.

Sus tablas de muchos a muchos no necesitarían un PK adicional (por ejemplo, PostFavoriteID ). Un primario combinado de ambos PostID y UserID sería suficiente ya que PostFavoriteID nunca se usa en ningún otro lugar. Esto se aplica a todas las tablas de combinación

Como con el anterior. respuesta, no veo una ventaja o desventaja. Yo puedo poner ambos en la misma tabla desde el NULL (o tal vez mejor -1 ) los valores no me molestarían.

Los pondría en la misma tabla usando un disparador para manejar el incremento de ViewCount mesa

Está utilizando un esquema normalizado, por lo que cualquier adición se puede realizar en cualquier momento.

No puedo decírtelo, aún no lo he hecho, pero sé que Solr es muy poderoso y flexible, así que creo que deberías estar haciéndolo bien.

Hay muchos hilos aquí en SO discutiendo esto. Personalmente, me gusta más una clave sustituta (u otra clave numérica única, si está disponible), ya que hace que las consultas sean más fáciles y rápidas, ya que un int se busca más fácilmente. Si permite un cambio de nombre de usuario/correo electrónico/cualquiera que sea su PK, entonces se requieren actualizaciones masivas. Con la clave sustituta, no necesita molestarse.

Lo que también haría es agregar cosas como created_at , last_accessed en (mejor hecho a través de disparadores o procedimientos IMO) para tener algunas estadísticas ya disponibles. Esto realmente puede brindarte estadísticas valiosas

Otras estrategias para aumentar el rendimiento serían cosas como Memcache, caché de contador, tablas particionadas,... Tales cosas se pueden discutir cuando los usuarios realmente lo sobrepasan porque puede haber cosas/tecnologías/técnicas/... que son muy específicas. a su problema.