Una consulta sobre vista en mysql

77 views
Skip to first unread message

Marcelo Barberis

unread,
Oct 10, 2017, 1:38:27 AM10/10/17
to publicesvfoxpro
Hola buenas tardes
Quisiera consultarles a cualquier persona que tenga mucha experiencia en el trabajo con mysql, yo en todos mis trabajos utilizo tablas y las vista para armar como otras tablas pero con tablas relacionadas, se que hay varios que no usan para nada las vistas pero yo o para mi son muy escenciales para todos mis trabajos.
Ahora yo tengo dos tablas tipo padre hija con un campo en comun idticket, pero el detalle esta que en la tabla padre tengo registros con su idticket pero en la tabla hija itemticket no hay y no es que el sistema haya trabajado mal, sino que no necesito en algunos casos ponerlos en la tabla hija.

Yo tengo un sistema para comida rapida en donde el usuario realiza la venta por ej una coca cola, una hamburguesa, una piza, todos estos productos se graban en la tabla ticketventa pero no se graban en la tabla itemticket, por lo que este caso el campo idticket que es 1 solo estara en la tabla ticketventa pero no en itemticket.

El usuario realiza otra venta y vende una coca cola, una porcion de pollo y le pregunta al cliente que presa desea comer y el cliente le dice la porcion de pollo con una presa Ala, ahora lo que hace el sistema es grabar los productos coca cola, porcion de pollo en la tabla ticketventa con idticket 2 y en la tabla itemticket guarda el detalle de la porcion de pollo con su cantidad y guarda el idticket 2 para realizar la relacion y hacer la impresion del ticket para el cliente y para enviarlo a la cosina para su preparacion. En esta venta si se guarda el idticket en ambas tablas pero no asi en la venta 1.

Mi consulta, desde hace unos dias atras no logro dar en el clavo de por que con ambas tablas con un total de 50000 registros por lo que en la vista se tendria que visualizar mas de 50000 registros en dos administradores que tengo al momento de ver la vista con todos los registros en un primero momento pareciera que estaria colgado el administrador pero deje y me demoro 8 minutos y les pregunto el tener el campo en comun id en ambas tablas pero en la tabla padre tengo registrado el id pero en la tabla hija en algunas ocaciones no por la explicacion anterior, esto estaria causando la lentitud al mostrar la vista...? o se cuelga el adm de mysql ?

Se que algunos me diran que porque tengo que traer todos los registros que deberia filtar solo por el registro que deseo ver, pero con un trabajo de solo 4 meses llevan mas de 30000 registros que pasaria si tengo que hacer estadistica de 1 año si en 4 meses llevan 30000 en una año sobrepasarian los 100000 que pasaria si se me cuelga o la lentitud aumentaria de 7 minuto a 1 hora o mas.

Hay esta el tema me gustaria poder entenderlo y mejorar todos mis codigos para no tener que lidiar cuando me llegue el momento.

Desde ya agradecido por cualquier comentario

--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

Antonio Meza

unread,
Oct 10, 2017, 8:19:20 AM10/10/17
to Comunidad de Visual Foxpro en Español
No tiene nada de malo trabajar con vistas, al que no le guste trabajar con ellas es porque no las conoce jajajajaja

El problema esta en la forma que guardas tus tablas, no se si quieres ahorrarte espacio (cosa que a estas alturas sobra) porque si vendes un solo producto lo guardas en la cabecera, cuando debe ser si o si en el detalle.

Cuando uno arma mal la base de datos la cual representa algo así como el 60% del proyecto empiezan los problemas, es decir que planear la base de datos es una de las cosas mas importantes que merece la pena tomarse el tiempo para analizarla y sobre todo normalizarla.

Aun estas a tiempo de corregir la estructura de tu base de datos y se resolverán muchos problemas que se te presentan ahora como es la lentitud y luego al generar reportes. Es decir debes tener SI o SI el campo que relacione la venta con el detalle de la venta y siempre guardar los productos en el detalle y NUNCA en la cabecera.

saludos
Antonio Meza

Carlos Miguel FARIAS

unread,
Oct 10, 2017, 10:00:32 AM10/10/17
to Grupo Fox
Totalmente de acuerdo con Antonio.
Fíjate lo importante de las vista que Arnold Schwarzenegger lo recalcó en "Hasta la vista, baby" (lo que da la pauta de que no importa el hardware, el resultado bueno o malo lo da el software)

Allan Raúl Acuña

unread,
Oct 10, 2017, 10:57:20 AM10/10/17
to publice...@googlegroups.com
Muy importante hacerlo maestro-detalle, aunque sea un solo registro. Otro factor importante es que estas tablas tengan un indice de ordenacion correcto para asi optimizar la consulta de la vista.

Saludos amigo.

Allan Raul Acuña
Nicaragua


From: publice...@googlegroups.com <publice...@googlegroups.com> on behalf of Carlos Miguel FARIAS <carlosmig...@gmail.com>
Sent: Tuesday, October 10, 2017 8:00:26 AM
To: Grupo Fox
Subject: Re: [vfp] Re: Una consulta sobre vista en mysql
 

Saúl Piña

unread,
Oct 10, 2017, 11:06:11 AM10/10/17
to Comunidad de Visual Foxpro en Español
coincido con Antonio Meza, y creo que por alli "esta el detalle" la tabla maestra, no puede tener inconsistencias con la tabla detalle, si se crea un ticket u orden de compra, es obvio que al menos deberá contener un item. 

Ojala y consideres las recomendaciones. Saludos y buena travesia!



El martes, 10 de octubre de 2017, 0:38:27 (UTC-5), Marcelo Barberis escribió:

Marcelo Barberis

unread,
Oct 10, 2017, 1:17:49 PM10/10/17
to publicesvfoxpro
hola bueno gracias por sus comentarios solo una cosa mas, yo en este ejemplo a grandes rasgos que le pude explicar, yo tendria por ej campos cabeceras en tabla padre que son nro factura, cliente totales y en el items o tabla hijas o detalle irian los detalles como ser coca cola, porcion de pollo, ahora aqui este producto porcion de pollo tiene un grupo de subproducto Nombre Producto: Pollo Broaster Porcion(Ala, pierna, contra pierna, pecho, rabadilla) y a estos productos que derivan del producto Pollo Broaster Porcion lo estaba ubicando en la tabla hija itemsticket, por eso es que no en todo los itemticket iba el idticket campo relacionador de ambas tablas.
Ahora les consulto como se armaria las tablas como se guardaria la informacion donde tengo una cabecera, detalles productos y asu vez estos detalles tienen SubDetalle de Detalle, un poco complicado nose .
Gracias de antemano por todo los comentarios

Antonio Meza

unread,
Oct 10, 2017, 1:34:10 PM10/10/17
to Comunidad de Visual Foxpro en Español
El hecho que un producto tenga subproductos y otros productos no los tengas no te da la pauta para construir las tablas en la forma que las usas, debes leer sobre Normalizacion al menos las 3 primeras formas normales.

Se me ocurre así de rápido sin tener mas detalles que tu tabla Productos le agregues un campo IdProducto_Grupo y crees una tabla catalogo de Grupos de Productos, donde agregas un Grupo llamado "Pollo Boaster" , otro grupo "Sin Grupo", etc

Luego a cada producto le vas agregando el Grupo al que corresponde y listo al vender sabrás que si fue una Ala de pollo este corresponde a Pollo Boaster, si vendiste una CocaCola sin grupo o grupo Bebidas, etc y podrás armar infinidad de reportes y estadísticas, cosa que se te va a dificultar enormemente en la forma que lo tienes ahorita.

saludos
Antonio Meza

Alan Cybar

unread,
Oct 10, 2017, 1:54:23 PM10/10/17
to publice...@googlegroups.com
Buenas,

Así como lo veo, es un producto compuesto, es decir, que hay un producto compuesto, como en este caso que es un combo, en donde un producto es el componente del otro.
Podrías usar una tabla de Combos, relacionada con los productos, y estos combos, en la tabla de productos, asi tienes todos los productos en la tabla de productos.

Lo que debes de tener en cuenta es si haces el inventario y tienes que descontar el producto del kit de tu stock.

Saludos,

Alan Sanier
Asunción - Paraguay

Carlos Miguel FARIAS

unread,
Oct 11, 2017, 7:16:55 AM10/11/17
to Grupo Fox
Algo así como:
Facturas = {idFactura, FechaFactura, idCliente, MontoBruto, Impuestos, Estado}

Detalles = {idFactura, idProducto, Cantidad, PrecioVentaUnitario, Estado}

Productos = {idProducto, NombreProducto, <... otros datos producto como unidad de medida...>, EsCompuesto, Estado}

Recetas = {IdProducto, Secuencia, IdDispositivo, IdProcedimiento, IdSubProducto, Tiempo, Cantidad, Descripcion}

Dispositivos = {IdDispositivo, NombreDispositivo, <... otros datos ...>}

Procedimientos = {IdProcedimiento, NombreProcedimiento, Detalles, Tiempo}

Donde tenemos Claves_Primarias y Claves_Foráneas.

IdSubProducto es un producto que compone el producto original
Las tablas se relacionan de clave primaria a foránea

Facturas 1:N Detalles N:1 Productos 1:N Recetas N:1 (Dispositivos Procedimientos)
Detalles Recetas tienen claves compuestas, se asume que en una factura, un producto solo figura una vez. Un producto tiene una receta (única) compuesta de varios pasos en secuencia.

Saludos: Miguel, La Pampa (RA)
Larga VIda y Prosperidad
Que la Formas Normales los acompañen

mpulla

unread,
Oct 11, 2017, 9:59:45 AM10/11/17
to Comunidad de Visual Foxpro en Español
Hola Marcelo.

Como te indican los foxeros, tienes que normalizar.

50000 registros son poco, publica la estructura de tus tablas con sus indices, data de prueba, tus vistas como la procesas y lo data que esperas, para ver que podemos hacer..

Saludos.
Mauricio
Reply all
Reply to author
Forward
0 new messages