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

Recomendación: 2 ó 1 tabla

Estas en el tema de Recomendación: 2 ó 1 tabla en el foro de Bases de Datos General en Foros del Web. Holaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Una preguntilla, porque no me decido en seguir una implementación, expongo las dos implementaciones que he pensado muy reducidas: 1º forma, una tabla así: ...
  #1 (permalink)  
Antiguo 18/05/2009, 14:38
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 15 años, 6 meses
Puntos: 1
Recomendación: 2 ó 1 tabla

Holaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Una preguntilla, porque no me decido en seguir una implementación, expongo las dos implementaciones que he pensado muy reducidas:

1º forma, una tabla así:
tabla1: idTabla1, campo1, campo2, campoLargo*

2º forma, dos tablas así:

tabla 1: idTabla1, campo1, campo2, idTabla2
tabla 2: idTabla2, idTabla1, campoLargo*

*donde campoLargo es una lista de elementos, en el primer caso estaria separado por comas, y en el segundo caso, estarian separado por filas.

Espero que se entienda, no sabía como explicarlo, realmente no se que implementación escoger......

alguna ayudita please?

gracias!!!
  #2 (permalink)  
Antiguo 18/05/2009, 20:32
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: Recomendación: 2 ó 1 tabla

En realidad, estás tratando de describir algo demasiado genérico y haciendo una pregunta excesivamente específica.
No es posible responderte esto. Para aconsejarte en un modelo de tablas debemos analizar el tipo de datos REALES que vas a manejar, y sobre qué tipo de sistema se hace el análisis para aconsejarte.
Así como lo planteas, puede que una, dos o tres tablas puedan alcanzar o ser funcionales... pero cuando vemos el modelo real, es posible que nos encontremos con faltas de normalización que haga que el modelo realmente eficiente sean finalmente cinco, seis, siete o diez tablas. Eso no es posible de determinar a priori con el ejemplo que das.
Postea el ejemplo más cercano a la realidad, y danos una idea de para qué tipo de información se diseña y entonces si podremos aconsejarte algo real.
__________________
¿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 19/05/2009, 04:05
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Recomendación: 2 ó 1 tabla

hola, primero gracias por el interés, voy a cambiar un poco la implementación de las tablas y a especificar un poco más el problema:


========================

* OPCIÓN 1 (una sola tabla)
**********

tabla1
-------
idTabla1, nombre, apellidos, profesiones

ejemplo de inserción de datos
--------------------------------------
(idTabla1, nombre, apellidos, profesiones) VALUES (id, 'unNombre', 'unApellido', 'mecanico, albañil, medico')



* OPCIÓN 2 (dos tablas)
**********

tabla1
-------
idTabla1, nombre, apellidos

tabla2
-------
idTabla1, idTabla1, trabajo


ejemplo de inserción de datos (los mismos)
--------------------------------------
En tabla 1 - (idTabla1, nombre, apellidos) VALUES (id1, 'unNombre', 'unApellido')

En tabla 2 - (idTabla2, idTabla1, profesion) VALUES (id, id1, 'mecanico')
En tabla 2 - (idTabla2, idTabla1, profesion) VALUES (id, id1, 'albañil')
En tabla 2 - (idTabla2, idTabla1, profesion) VALUES (id, id1, 'medico')

=====================


datos a condiderar:
- pues en principio en cualquier momento se pueden agregar nuevas profesiones
- no creo que ninguno llegue a tener mas de 40-50 profesiones
- la lista de personas no creo que llegue nunca a los 10.000

supongo que son pocos bytes como para que sea determinante una opción o la otra, y ahora mismo no sabría decir con que implementación me encontraré más cómodo cuando lleve 1.000 o 2.000 datos insertados....


Espero haber aclarado un poco la cuestión.. :)

Gracias

Última edición por yakukubu; 19/05/2009 a las 04:31
  #4 (permalink)  
Antiguo 19/05/2009, 05:14
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: Recomendación: 2 ó 1 tabla

Así como planteas el modelo, la respuesta es ni una ni dos tablas: al menos tres:
PERSONA(Persona_Id, Nombre, Apellido, ....)
PROFESION(Profesion_Id, Denominacion)
PROFESION_PERSONA(Persona_id, Profesion_id)

Esa sería una forma que respeta la 3FN e incluso la 4FN, y te permite adicionar profesiones nuevas sin tener que modificar la estructura de las tablas, y también evita usar tipos innecesariamente grandes en la tabla principal.
También tiene la ventaja de que una persona puede figurar con tantas profesiones como profesiones haya registradas, sin ningún problema.
Solamente requiere que para ingresar un registro en PROFESION_PERSONA, deban forzosamente existir tanto una como otra en sus tablas, ya que la tercera tabla está compuesta en definitiva por las claves primarias de las otras dos.

Respecto a tus consideraciones, te hago dos comentarios:
1. Todo diseño de tablas y de procesos de bases de datos se debe hacer para el peor escenario posible, porque (¡vade retro Murphy!) el peor escenario posible es más habitual de lo que la mayoría se imagina. Si la base estuviese en web (estoy suponiendo), puedo asegurarte que 10.000 registros se pueden llenar en un pestañeo, antes de lo que te esperes.
2. Es preferible perder tiempo haciendo un buen diseño que modificar una base que ya está operativa. ¡No tienes idea de los problemas que causa modificar bases que ya están en uso! Es una tortura.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/05/2009, 07:41
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Recomendación: 2 ó 1 tabla

Hola, muchísimas gracias por tu respuesta

A raiz de tu planteamiento me surge una duda: La implementación seguiría siendo válida si las profesiones coincidieran en menos de un 15% de los casos? Es decir, si nos encontramos que vamos a tener que añadir 10-12 profesiones para cada persona y solamente podriamos "reutilizar" 1-2 profesiones ya insertadas...

realmente no se insertarán cosas como 'medico', sino como 'proyecto x', (quizás debí explicarlo mejor en el segundo mensaje), es decir, que la tabla PROFESION, tendría muy pocas filas reutilizables. Seguiría entonces siendo la mejor implementación?

Saludos
  #6 (permalink)  
Antiguo 19/05/2009, 08:11
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: Recomendación: 2 ó 1 tabla

Estás planteando cosas que tienen que ver no tanto con el modelo de datos (que como te lo describo, es universal), sino con el diseño del sistema para el que ese modelo de datos se crea.
Es decir: Me estás describiendo cosas que tienen relación con las Reglas de Negocio, no con los datos. En este punto ya me deberías decribir con más precisión en qué consiste el sistema, porque para el modelo descripto en tu segundo post el modelo propuesto es perfectamente aplicable.
Entendamos esto: Un registro de una tabla primaria es siempre reutilizable, porque jamás queda cancelado porque se haya asignado una profesión (o proyecto) a una persona. En todo caso, donde queda restringido (y no cancelado) es en la tabla PROFESION_PERSONA, que es la que controla la unicidad entre una persona determinada y la profesión asignada. Siendo PK la combinación de ambas FK no se puede repetir jamás una combinación de IDs iguales.
Si lo que quieres es restringir desde la tabla misma que una persona peuda tener más de una profesión (o proyecto), eso es simplemente definir un índice UNIQUE sobre el campo persona_id en ESA tabla.

El hecho de que se use menos del 15%& de los registros, o se use el 99% de los registros es irrelevante para el modelo de datos. Eso es problema de implementación, no de la base. La base de datos tiene que ser flexible para cualquier uso presente y futuro.

Cita:
realmente no se insertarán cosas como 'medico', sino como 'proyecto x',
Esto también es irrelevante, en tanto creees una tabla PROYECTO_PERSONA, para controlar la relación (con lo que ya estamos hablando de cuatro tablas), y en esa asignación, la tabla PROYECTO debe forzosamente tener una FK con el persona_id del jefe de proyecto.
Con este último punto se refuerza mi hipótesis de que para darte un pantallazo más o menos certero, se requieren detalles de lo que se pretende administrar y así darte sugerencias más precisas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/05/2009, 09:06
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Recomendación: 2 ó 1 tabla

me has convencido xD

Realmente lo que me retenía a usar tu modelo de datos era ese 15% reutilizable, a primera vista me parecían demasiadas tablas para lo poco que podría reutilizar (aunque solo es una estimación).

Pero supongo que lo ideal es ceñirme a los estándares... y no reinventar la rueda!

Bueno, doy el tema por concluido, con un poco de suerte puede que le sirva a más gente :)

Un saludo gnzsoloyo y gracias
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 19:18.