¿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?
mysql
database-design
Siddharth Patel
fuente
fuente
Respuestas:
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.
fuente
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.
fuente