Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Diseño: Muchos campos en una tabla o varias tablas unidas por JOIN

Estas en el tema de Diseño: Muchos campos en una tabla o varias tablas unidas por JOIN en el foro de Bases de Datos General en Foros del Web. Buenas tardes. Llevo días buscando la opción más óptima de diseñar una base de datos y me ha surgido una duda de la que no ...
  #1 (permalink)  
Antiguo 14/03/2016, 07:14
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 3 meses
Puntos: 0
Diseño: Muchos campos en una tabla o varias tablas unidas por JOIN

Buenas tardes.

Llevo días buscando la opción más óptima de diseñar una base de datos y me ha surgido una duda de la que no encuentro mucha documentación clara.

Creo una tabla con muchos campos o troceo los identificadores en varias tablas.

Por ejemplo:

- Opción 1, creando varias tablas con index y claves foráneas.

tabla usuarios

id_usuario int(5) PRIMARY AI
nombre char(50)
tipo smallint(2) INDEX

tabla usuarios_tipo

id smallint(2) PRIMARY AI
titulo char(50)

tabla usuarios_datos

id int(5) PRIMARY AI
id_usuario int(5) INDEX
direccion char(100)
municipio int(4) INDEX
provincia int(4) INDEX
email varchar(100)
telefono char(15)

tabla municipios:

id smallint(2) PRIMARY AI
titulo char(50)

tabla provincias:

id smallint(2) PRIMARY AI
titulo char(50)

- Opción 2, crear una tabla con todo en campos y me ahorro trabajar con JOIN a la hora de llamarlos:

tabla usuarios

id_usuario int(5) PRIMARY AI
nombre char(50)
tipo char(50)
direccion char(100)
municipio char(50)
provincia char(50)
email varchar(100)
telefono char(15)

A mi forma de ver, la opción 1 es más optimizada, permite indexación y relacionar tablas para update y delete y me parece más escalable, pero claro, para consultar habría que hacer varios JOINS para obtener todos los datos.

Me guataría saber confirmar que esto es así o saber qué motiva sus respuestas.

Gracias.

Un saludo.
  #2 (permalink)  
Antiguo 14/03/2016, 07:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Diseño: Muchos campos en una tabla o varias tablas unidas por JOIN

Opción 1. Sin lugar a dudas.
Es la única version que tienes normalizada, la otra es simplemente basura inconsistente.

Ya existen reglas para este tipo de cosas, y no hay nada nuevo bajo el sol. La normalización tiene muchas razones de existir y tu opción 2 viola la principal de todas: la consistencia de datos.
Una base con datos inconsistentes, que pueden surgir sin problemas de una tabla como la que propones en la segunda opción, no es una base de datos, sino una colección de datos sucios, que solo puede devolver información basura.

Sin ofender.

No analices las cosas con lente de "me ahorro X", es un error. Tienes que mirar los datos de acuerdo al método de mayor precisión y optimización... y no es la segunda de las opciones que propones.
Además te estás olvidando de un detalle precioso: Los DBMS están optimizados para trabajar haciendo cálculos relacionales con JOIN, mientras que poner los datos en todas las tablas te obligará a crear indices adicionales innecesarios y generar consultas sin la optimizacion necesaria. Todo eso redundará en problemas de performance en varios niveles.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/03/2016, 07:27
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Diseño: Muchos campos en una tabla o varias tablas unidas por JOIN

Gracias por la aclaración ;)

Etiquetas: campos, diseño, join, muchos, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:04.