Duda de diseño

17/08/2007 - 19:26 por Martin | Informe spam
Tengo que hacer un diseño de tablas para una empresa supervisora y tengo una
duda en una parte del diseño.

La lógica del negocio es, a grandes rasgos, la que sigue:

La empresa ofrece varios servicios, hasta el momento once, pero es una
empresa que espera crecer y que en el futuro ofrecerá más servicios. En cada
uno de estos servicios toma datos, por ejemplo, las observaciones, el lugar
donde se hacen algunos pesajes, etc.

La empresa, para poder llevar a cabo los servicios, toma muchos datos en
común, para darles una mejor idea, para el servicio UNO, toma los datos A, B,
C y D, para el servicio DOS, toma los datos B, C y D, en general, cada uno de
los once servicios toma datos en común.

Cada vez que se ofrece un servicio tengo que llevar el registro del mismo, y
es esa la razón por la que acudo a ustedes.

Había pensado en crear una tabla llamada RegistroServicio en la cual pondría
todos los campos de todos los servicios, algo así como el mínimo común
múltiplo de todos los campos, y un campo en el que se indique de qué clase de
servicio se trata. Con lo cual, a la hora de ingresar los datos habrían
campos que se dejarían en blanco, puesto que ningún servicio rellenaría todos
los campos, por ejemplo, la tabla tendría 50 campos, entonces uno de los
servicios llenaría 35 campos, dejando 15 en blanco y así.

Me asaltan las dudas porque a la hora de que me pidan el reporte mensual de
un determinado servicio tendría que hacer un filtro pasando como parámetro el
tipo de servicio del cual se quiere saber los movimientos, lo que me
ralentizaría el proceso de búsqueda. Además, como esperan ofrecer más
servicios, el día que aparezca un servicio en el cual tengan que tomar un
dato que antes no tomaban, me vería obligado a crear un nuevo campo a esa
tabla general, no sé si eso de cambiar la estructura de una tabla está bien,
así sea, simplemente, agregarle un nuevo campo, a simple vista, no me parece
bien.

También he pensado en crear una tabla para cada uno de los servicios, por lo
que habría varias tablas con la mayoría de atributos iguales y no sé si eso
sea correcto.

Otra opción que se me ha ocurrido es crear una tabla "padre" con los datos
comunes y luego crear tablas hijas por cada uno de los servcios en las cuales
sólo se tendrían los datos no comunes, pero me generaría el problema que
cuando aparezca un nuevo servicio que no use todos los campos de la tabla
"padre" dejaría campos en blanco a la hora de ingresar datos, con lo que, de
alguna manera, se parecería a la primera solución que planteé.

Hasta ahora sólo se me han ocurrido esas opciones, espero que alguno de
ustedes me pueda orientar y decir cuál es la forma correcta de solucionar un
caso como este.

Gracias por su tiempo.

Preguntas similare

Leer las respuestas

#1 Antonio Ortiz
17/08/2007 - 20:16 | Informe spam
Para estos casos yo generalizaria mas la idea con 2 tablas:

Tabla de Servicios: ID, Folio, Fecha, IDTipoServicio
Tabla detalle de Servicios: ID, IDConcepto, Valor

Por otro lado tendria 2 tablas donde definiria los campos para cada tipo de
servicio
Tabla Tipo de Servicios: IDTipoServicio, Descripcion {Nombre del tipo de
servicio
Tabla Conceptos del tipo de Servicio: ID, IDTipoServicio, Descripcion
{Nombre del campo

En la aplicacion cliente, cuando se elije el tipo de servicio, doy de alta
1 detalle de servicio para cada concepto en el tipo de concepto
seleccionado. Si este cambia elimino los anteriorres y doy de alta
nuevamente los detalles o 'campos' que utiliza este tipo de servicio.


suerte,

Antonio Ortiz
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com



"Martin" escribió en el mensaje
news:
Tengo que hacer un diseño de tablas para una empresa supervisora y tengo
una
duda en una parte del diseño.

La lógica del negocio es, a grandes rasgos, la que sigue:

La empresa ofrece varios servicios, hasta el momento once, pero es una
empresa que espera crecer y que en el futuro ofrecerá más servicios. En
cada
uno de estos servicios toma datos, por ejemplo, las observaciones, el
lugar
donde se hacen algunos pesajes, etc.

La empresa, para poder llevar a cabo los servicios, toma muchos datos en
común, para darles una mejor idea, para el servicio UNO, toma los datos A,
B,
C y D, para el servicio DOS, toma los datos B, C y D, en general, cada uno
de
los once servicios toma datos en común.

Cada vez que se ofrece un servicio tengo que llevar el registro del mismo,
y
es esa la razón por la que acudo a ustedes.

Había pensado en crear una tabla llamada RegistroServicio en la cual
pondría
todos los campos de todos los servicios, algo así como el mínimo común
múltiplo de todos los campos, y un campo en el que se indique de qué clase
de
servicio se trata. Con lo cual, a la hora de ingresar los datos habrían
campos que se dejarían en blanco, puesto que ningún servicio rellenaría
todos
los campos, por ejemplo, la tabla tendría 50 campos, entonces uno de los
servicios llenaría 35 campos, dejando 15 en blanco y así.

Me asaltan las dudas porque a la hora de que me pidan el reporte mensual
de
un determinado servicio tendría que hacer un filtro pasando como parámetro
el
tipo de servicio del cual se quiere saber los movimientos, lo que me
ralentizaría el proceso de búsqueda. Además, como esperan ofrecer más
servicios, el día que aparezca un servicio en el cual tengan que tomar un
dato que antes no tomaban, me vería obligado a crear un nuevo campo a esa
tabla general, no sé si eso de cambiar la estructura de una tabla está
bien,
así sea, simplemente, agregarle un nuevo campo, a simple vista, no me
parece
bien.

También he pensado en crear una tabla para cada uno de los servicios, por
lo
que habría varias tablas con la mayoría de atributos iguales y no sé si
eso
sea correcto.

Otra opción que se me ha ocurrido es crear una tabla "padre" con los datos
comunes y luego crear tablas hijas por cada uno de los servcios en las
cuales
sólo se tendrían los datos no comunes, pero me generaría el problema que
cuando aparezca un nuevo servicio que no use todos los campos de la tabla
"padre" dejaría campos en blanco a la hora de ingresar datos, con lo que,
de
alguna manera, se parecería a la primera solución que planteé.

Hasta ahora sólo se me han ocurrido esas opciones, espero que alguno de
ustedes me pueda orientar y decir cuál es la forma correcta de solucionar
un
caso como este.

Gracias por su tiempo.
Respuesta Responder a este mensaje
#2 S Y
20/08/2007 - 04:32 | Informe spam
Martin,

Yo empezaría el diseño con 5 tablas:
Servicio
ServicioPregunta
Pregunta
PreguntaRespuesta
Respuesta

SERVICIO
ServicioID

SERVICIOPREGUNTA
ServicioID
PreguntaID

PREGUNTA
PreguntaID

PREGUNTARESPUESTA
PreguntaID
RespuestaID

RESPUESTA
RespuestaID
ServicioID


Con este diseño de "many to many" cada servicio pude hacer uso de cualquiera
de las preguntas, cada pregunta puede tener cualquier cantidad de respuestas
las culaes son clasificadas utilizando la llave "Foreign" ServicioID que
existe en la tabla RESPUESTA. Te explico a continuación.

Al tener 3 servicios y diez preguntas, tus tablas estarian relacionadas de
la siguiente manera:
SERVICIO
1
2
3

SERVICIOPREGUNTA
1,1
1,2
1,3
1,4
1,5
2,1
2,3
2,5
2,6
2,7
3,1
3,2
3,3
3,8
3,9
3,10

PREGUNTA
1
2
3
4
5
6
7
8
9
10


De esta manera SERVICIO 1 tiene 5 preguntas, SERVICIO 2 tiene 5 preguntas y
SERVICIO 3 tiene 6 preguntas. Las preguntas 1 & 3 son preguntas comunes de
los tres servicios. La pregunta 2 es utilizada en el servicio uno y tres.

Las tablas PreguntaRespuesta y Respuesta se relacionan de la misma manera
que las tres primeras tablas pero con una pequeña diferencia. La tabla
RESPUESTA tiene una llave "Foreign" que liga con la tabla SERVICIO.
PREGUNTA
1
2
3
4
5
6
7
8
9
10

PREGUNTARESPUESTA RESPUESTA
1,1
1,2
1,3

RESPUESTA
1,1
2,1
3,1

Si me envías tu dirección de correo electrónico, te puedo enviar una base de
datos de MS SQL 2005 para que veas el diseño.


"Martin" wrote in message
news:
Tengo que hacer un diseño de tablas para una empresa supervisora y tengo
una
duda en una parte del diseño.

La lógica del negocio es, a grandes rasgos, la que sigue:

La empresa ofrece varios servicios, hasta el momento once, pero es una
empresa que espera crecer y que en el futuro ofrecerá más servicios. En
cada
uno de estos servicios toma datos, por ejemplo, las observaciones, el
lugar
donde se hacen algunos pesajes, etc.

La empresa, para poder llevar a cabo los servicios, toma muchos datos en
común, para darles una mejor idea, para el servicio UNO, toma los datos A,
B,
C y D, para el servicio DOS, toma los datos B, C y D, en general, cada uno
de
los once servicios toma datos en común.

Cada vez que se ofrece un servicio tengo que llevar el registro del mismo,
y
es esa la razón por la que acudo a ustedes.

Había pensado en crear una tabla llamada RegistroServicio en la cual
pondría
todos los campos de todos los servicios, algo así como el mínimo común
múltiplo de todos los campos, y un campo en el que se indique de qué clase
de
servicio se trata. Con lo cual, a la hora de ingresar los datos habrían
campos que se dejarían en blanco, puesto que ningún servicio rellenaría
todos
los campos, por ejemplo, la tabla tendría 50 campos, entonces uno de los
servicios llenaría 35 campos, dejando 15 en blanco y así.

Me asaltan las dudas porque a la hora de que me pidan el reporte mensual
de
un determinado servicio tendría que hacer un filtro pasando como parámetro
el
tipo de servicio del cual se quiere saber los movimientos, lo que me
ralentizaría el proceso de búsqueda. Además, como esperan ofrecer más
servicios, el día que aparezca un servicio en el cual tengan que tomar un
dato que antes no tomaban, me vería obligado a crear un nuevo campo a esa
tabla general, no sé si eso de cambiar la estructura de una tabla está
bien,
así sea, simplemente, agregarle un nuevo campo, a simple vista, no me
parece
bien.

También he pensado en crear una tabla para cada uno de los servicios, por
lo
que habría varias tablas con la mayoría de atributos iguales y no sé si
eso
sea correcto.

Otra opción que se me ha ocurrido es crear una tabla "padre" con los datos
comunes y luego crear tablas hijas por cada uno de los servcios en las
cuales
sólo se tendrían los datos no comunes, pero me generaría el problema que
cuando aparezca un nuevo servicio que no use todos los campos de la tabla
"padre" dejaría campos en blanco a la hora de ingresar datos, con lo que,
de
alguna manera, se parecería a la primera solución que planteé.

Hasta ahora sólo se me han ocurrido esas opciones, espero que alguno de
ustedes me pueda orientar y decir cuál es la forma correcta de solucionar
un
caso como este.

Gracias por su tiempo.
Respuesta Responder a este mensaje
#3 Martin
20/08/2007 - 16:54 | Informe spam
Muchísimas gracias por el tiempo invertido en responder mi pregunta y ser tan
detallado en los ejemplos. El método que propones es muy flexible.

Gracias.
Respuesta Responder a este mensaje
#4 Martin
20/08/2007 - 16:56 | Informe spam
Gracias por el tiempo que has invertido en responderme. Con tu ayuda y la de
SY se me han aclarado varias cosas.

Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida