Tabla única con más columnas frente a varias tablas con menos columnas

8

¿Cuál sería un mejor diseño de base de datos para un sitio web de red social? ¿Una sola tabla con más columnas y menos filas, o varias tablas con menos columnas pero más filas?

Por ejemplo: un usuario puede publicar una actualización en su muro o en un grupo.

Dos diseños de bases de datos que se me ocurren son:

Diseño 1

Publicaciones de usuario

  • carné de identidad
  • ID de usuario
  • enviar
  • fecha y hora

UserGroupPost :

  • carné de identidad
  • Identificación del grupo
  • ID de usuario
  • enviar
  • fecha y hora

Problema potencial : podría requerir uniones, que pueden (en el futuro) ser una consulta lenta.

Diseño 2

Publicaciones :

  • carné de identidad
  • ID de usuario
  • Identificación del grupo
  • enviar
  • datetime (donde groupid sería nulo si el usuario publica en su muro)

Problema potencial : La reproducción en bucle sobre un conjunto de datos grande podría llevar un tiempo (largo).


¿Cómo puedo obtener un mejor rendimiento cuando aumentan los datos? ¿Hay alguna otra (mejor) manera?

Siddharth Patel
fuente
Para mí, pocas columnas más filas. Es fácil administrar una porción por porción que tener un gran conjunto de datos. Si su gran preocupación son los grandes datos en el futuro, no lo haga. El servidor SQL está diseñado con ese tipo de problema, todo lo que tiene que hacer es diseñarlo correctamente. Tener un gran conjunto de datos no es un problema si sabes cómo optimizar tu consulta
Vincent Dagpin
Usar el plan de ejecución es realmente una gran ayuda. Le dice cuál es el problema con su consulta. Ps: no haga bucle, si es posible use el procesamiento masivo, esa característica ya está allí,
úsela

Respuestas:

2

Mi inclinación aquí siempre sería la opción de diseño 1, o al menos en esa línea. No se preocupe demasiado por tratar de eliminar la necesidad de unir tablas en consultas futuras: cualquier base de datos normalizada utilizará uniones en consultas útiles, solo son bases de datos relacionales.

Además, ¿por qué necesariamente tendría que unirse a las tablas userPosts y userGroupPosts para su sitio web? ¿No se mostrarían por separado? La única razón por la que te unirías a estas tablas es quizás cuando busques publicaciones, pero no debería ser demasiado difícil escribir consultas eficientes para eso. Aparte de eso, es posible que desee consultar las tablas para fines de análisis, pero ese no es el objetivo principal de esta base de datos.

El diseño 2 al menos podría significar que terminas con una mesa muy ocupada.

Sin embargo, la mejor opción sería crear un prototipo de cada uno y ejecutar algunas pruebas. Cree un prototipo de cada opción de diseño y realice algunas evaluaciones comparativas de rendimiento en diferentes operaciones con algunos datos ficticios.

Ian_H
fuente
-3

Para mí, según su estructura actual, Design 2 es mejor. Puede implementar particiones, consultas optimizadas y una forma estructurada para crear una base de datos / tabla que disminuirá el tiempo de ejecución. Pero la normalización de algunos casos funciona mejor, pero depende totalmente de la arquitectura de diseño de su base de datos.

Dipa
fuente