Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Hola cacho22,
Bievenido a clubdelphi.

No se si seré el más adecuado para responderte, pues como he dicho antes... es seguro que hay gente que domina mejor esto.

Yo defiendo la idea de que todo depende del negocio. Sobre todo lo refierido a la base de datos, que es donde queda asentada toda la información (mejor dicho los datos).

Viendo lo que expones, yo apresuradamente diría que se trata de un error del concepto del dominio. Pero como sabemos, un error de dominio no es un error sino una interpretación del dominio a un nivel de abstracción determinado. Es decir que el diseño de la tabla y/o de la base de datos responde a una solución de menor nivel de complejidad ("complejidad" en cuanto a medida de implementar la solución en base a la abstracción) que la necesaria actualmente.
Por tanto la anomalia no es de sistema sino más bién que se debe a un cambio a nivel del dominio (lo cual es muy frecuente).

Una solución que yo consideraría es implementar un histórico de movimientos de los clientes. Es decir que ante cualquier operación ABM se quede acentado de dicho cambio. Vulgarmente decimos: "Un cliente puede tener muchos movimientos a su nombre y/o razón social" Por lo tanto una solución sería implementar una Tabla MovCli que lleve constancia (como mínimo) de:
1. el ID del cliente (obvio)
2. Fecha de la operación (movimiento)
3. Tipo de operación (alta, baja, modificación)
4. Campos necesarios para llevar la información anterior

De modo que para llevar el dichoso histórico debe "cruzarse" dicha info con los movimientos y no solo con la tabla Clientes.

Lo que dije es un modelo simple, es una idea... y como toda idea debe ajustarse y refinarse.
Espero que se me entienda...

Al menos asi lo veo yo.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 25-10-2007
cacho22 cacho22 is offline
Registrado
 
Registrado: oct 2007
Posts: 6
Poder: 0
cacho22 Va por buen camino
Saludos estimado Delphius:

Exactamente, lo mas aconsejable seria tener un historico de las ABM (altas,bajas,modificaciones) que ha hecho el USR a la tabla clientes, esto se puede hacer automaticamente en manejadores de base de datos ultimos (mediante triggers) quedando la ultima version del reg. en la tabla (en este caso clientes).

Si entendi bien, si quiero sacar un reporte de ventas de un lapso de tiempo largo, por ej. del 2005 al 2007 tendria q cruzar las tablas ventas con h_cliente (historico de cliente) para sacar una información mas correcta, en vez de ventas con cliente?.

Si es esto, desarrollar el reporte me resultaria mas complejo, sin embargo sacaria una información coherente.

No crees que una mejor alternativa seria 'bloquear de por vida' el nombre o razon social para los clientes una vez que estos ya han realizado un movimiento en la tabla ventas?, es decir, nunca mas dejar modificar el nombre o razon_social para este cliente una vez este haya realizado una compra?

Gracias por tu respuesta tan rapida....

Saludos
Responder Con Cita
  #3  
Antiguo 25-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por cacho22 Ver Mensaje
Saludos estimado Delphius:

Exactamente, lo mas aconsejable seria tener un historico de las ABM (altas,bajas,modificaciones) que ha hecho el USR a la tabla clientes, esto se puede hacer automaticamente en manejadores de base de datos ultimos (mediante triggers) quedando la ultima version del reg. en la tabla (en este caso clientes).

Si entendi bien, si quiero sacar un reporte de ventas de un lapso de tiempo largo, por ej. del 2005 al 2007 tendria q cruzar las tablas ventas con h_cliente (historico de cliente) para sacar una información mas correcta, en vez de ventas con cliente?.

Si es esto, desarrollar el reporte me resultaria mas complejo, sin embargo sacaria una información coherente.
Saludos
Hola de nuevo cacho22.
Tu lo haz dicho, obtener el histórico ahora es más complicado... es el precio que se paga cuando se elevan los "requisitos".

Cita:
Empezado por cacho22 Ver Mensaje
No crees que una mejor alternativa seria 'bloquear de por vida' el nombre o razon social para los clientes una vez que estos ya han realizado un movimiento en la tabla ventas?, es decir, nunca mas dejar modificar el nombre o razon_social para este cliente una vez este haya realizado una compra?
Saludos
Yo al comienzo he dicho que no se si soy el más indicado. Por lo que no soy dueño de la verdad absoluta. Y lo que he planteado no deja de ser una simple idea (mejor dicho alternativa).
Lo que dices es correcto. Correcto en cuanto al dominio que tu estás estudiando y entendiendo.
Pero... claro... como todo análisis, no es único. Tu desarrollo es una representación de tu entendimiento y si consideras que la razón social y/o el nombre de un cliente no puede ser alterado. Todo tu sistema lo reflejará y seguirá funcionando en cuanto la realidad se apegue a tu concepto del problema.

En fin... será cuestión de "gustos". La idea de hacer fijo los datos del cliente funciona, pero no es la única. Y hay otros factores que entran en juego: la progragación de requisitos y funcionalidades.

Imponer una restricción (que el cliente no pueda cambiar su razón social ha dejado de ser un requisito, ahora en tu concepto es una restricción) podría provocar cambios en el modo de operar tu sistema. Una restricción nunca debería cambiar a lo largo del ciclo de vida, por tanto condiciona al sistema (entendido a este como el todo: el software, la base de datos, etc) muy fuertemente y lo sujeta a un modelo rígido de la realidad.

Considero que si uno se plantea interrogantes es porque hay un elemento o punto del análisis y/o del dominio que no ha sido totalmente comprendido (o más común que sea opuesto o ambiguo a una parte de si mismo) Y hasta que en tu concepto no esté totalmente forjada la idea y comprensión seguirá siendo un elemento débil.

Por ejemplo: puede darse el caso que dependiendo de la razón social de tu cliente se computen ciertos descuentos, impuestos o algunas reglas de negocio. Si los datos de tu cliente necesitan ser fijos y como dices... que ante el cambio de razón social debe agregarse un nuevo cliente... esta imposición puede que lleve consigo una inconsistencia en algún otro punto del sistema si no se tienen las precuaciones y el debido análisis de las situaciones.

Ojo... no digo que tu planteo está mal. Como he dicho: podría traer consecuencias, no quiere decir que vas a tener problemas. No aseguro ni niego nada. Tu planteo debe ajustarse al mejor concepto de la realidad que tu comprendas.

Puedo aceptar tu propuesta y la aceptaré siempre y cuando considere que el modelo del diseño me lo permita. Y haya considerado (en lo que mi poca experiencia me lo diga) que implementarlo de dicha manera no traiga consigo malestares.

Esto te lo digo por lo que he visto en mi último trabajo. Uno cree que lo diseñado funciona y funciona hasta que viene el señor cambio y te lo da vuelta. Me ha tocado ser "DBA" y he encontrado un diseño que ha venido funcionando... pero claro... cuanto más me empapé del negocio puede ver y ser testigo de las complicaciones y artilugios que se tuvieron que implementar en el sistema para conseguir manteniendo la consistencia. He llegado a percatarme de que con unos pocos cambios en las tablas se hubieran solucionado algunos males.

Bueno en fin... no deja de ser un planteo. Y es así como se vive en el desarrollo del software: vivimos en un mundo en que se desea controlar pequeños y grandes caos y somos nosotros quienes deben darle cierto orden. Simulando la realidad e irnos preparandonos hacia los posibles nuevos cambios.

Sería muy interesante escuchar otros puntos de vista.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 25-10-2007 a las 19:42:49. Razón: aclaraciones
Responder Con Cita
  #4  
Antiguo 25-10-2007
cacho22 cacho22 is offline
Registrado
 
Registrado: oct 2007
Posts: 6
Poder: 0
cacho22 Va por buen camino
Delphius:

Me parece muy importante tu opinion y mucho mas al saber que trabajaste o trabajas como DBA, yo igualmente soy DBA en mi empresa, y actualmente estoy en el proceso de analisis de un nuevo sistema para el manejo de caja y como tu dices uno no es dueño de la verdad, sin embargo tu opinion es muy respetable y me abre muchas ideas alternativas para solucionar los problemas q a futuro se puedan presentar.

Respecto a lo que citaste:
Cita:

Imponer una restricción (que el cliente no pueda cambiar su razón social ha dejado de ser un requisito, ahora en tu concepto es una restricción) podría provocar cambios en el modo de operar tu sistema. Una restricción nunca debería cambiar a lo largo del ciclo de vida, por tanto condiciona al sistema (entendido a este como el todo: el software, la base de datos, etc) muy fuertemente y lo sujeta a un modelo rígido de la realidad.
de nuevo tienes toda la razon, por q si bien uno pone esta restriccion en todo el ciclo de vida del software o programa, puede ser q por ordenes superiores se te obligue a modificar la tabla citada, en este caso la razon_del_cliente, entonces todo el analisis ya no funcionará y esto llevará a inconsistencias futuras.

Por eso como tu dices, imponer esta restriccion haria el modelamiento de la realidad demasiado rigido (segun el caso, o la comprension q uno tenga).

Por tanto, sabiendo q en un futuro se tenga necesariamente que cambiar el nombre de ciertos clientes (yo creo q seran muy pocos en el transcurso de los años) el planteamiento q tu sugieres seria realizar los reportes de ventas cruzando la tabla de historico de clientes (h_cliente) con la tabla ventas?, claro q como decias:
es el precio que se paga cuando se elevan los "requisitos". Sin embargo el resultado es "obtener una información coherente y sin incosistencias" q es lo que uno busca.

Me parece que este diseño lo deben utilizar el servicio de impuestos internos de mi pais, por q en sus reportes t dan una información muy coherente de todo lo que hiciste en un lapso de tiempo prolongado.

Me es muy importante saber tu opinion, o plantear otra solución alternativa a las dos q se estan analizando de este caso en específico, gracias por tu colaboracion.

Saludos
cacho22

Última edición por cacho22 fecha: 25-10-2007 a las 22:04:35. Razón: no se ve muy bien
Responder Con Cita
  #5  
Antiguo 25-10-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Pienso que las solución no está ni en una de las propuestas ni en la otra, pero sí en las dos.

En serio, bajo mi punto de vista, el problema es de uso. Dudo que un cliente cambie de nombre, de tipo de compañía ( SRL a SA ) y no cambie de NIF - nº de identificación fiscal -, es decir el DNI para entendernos.

En el caso de que cambie el NIF, el cliente es nuevo, por lo que habría que haberse creado un nuevo cliente y asignarles las ventas a ése.
También puede darse el caso de que se haya registrado mal el nombre de un cliente por error, por lo que debería permitir la aplicación cambiarlo, aunque sea de una manera restrictiva y sabiendo lo que se hace.

Por lo tanto, yo dejaría la aplicación como está, ya que según mi opinión, está bien.

Espero haber aportado algo, aunque no tenga nada que ver con las tablas maestras, submaestras ni históricas.

He dicho.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #6  
Antiguo 25-10-2007
cacho22 cacho22 is offline
Registrado
 
Registrado: oct 2007
Posts: 6
Poder: 0
cacho22 Va por buen camino
Exactamente, en el ejemplo que estamos tratando, yo pienso q se tendria q restringir el nombre_del_cliente para que no se modifique, y si en algun caso se tiene q modificar, eso lo haga el DBA, claro q tendria q ser un pequeño detalle como por ejemplo arreglar una letra mal escrita o aumentarle un pqueño detalle, pero es importante saber bien que es lo que se esta haciendo, porque si se va cambiar completamente el nombre_del_cliente esto llevaria a una inconsistencia real.

Talvez si conoces alguna direccion q hable de estos temas o parecidos te estaria muy agradecido.

Muchas gracias por tu colaboración.
Responder Con Cita
  #7  
Antiguo 26-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Bueno, considerando el ritmo que viene tratandose en este hilo tal vez sea conveniente tratarlo fuera pues creo que esto ya toma un curso diferente al que se vino tratando originalmente.

Teniendo en cuenta el hecho de que ya fue hecho el diseño y que está en operación el sistema. Lo más económico y menos riesgoso sería continuar trabajando como tu venías haciendolo. Pero claro... igualmente creería que habrá que hacer unos ajustes menores.
Por más que deba agregarse un nuevo cliente, tengo entendido que debe tenerse referencia de que el cliente anterior se ha "transformado" en uno nuevo. Yo al menos lo veo así, si yo fuera parte de la gerencia (o el encargado de saber dicho movimiento) me gustaría tener constancia de que porqué pepito ya no opera con dicho nombre sino que lo hace bajo el nombre luisito. Si es que esta información le es útil a alguien (y por tanto la necesita) no basta con sólo agregar un nuevo cliente con los nuevos datos. Claro... la solución barata es que si dispone del campo Observaciones, una leyenda que diga "El cliente ha cambiado la razón social y ahora opera bajo el nombre Fulano"

Igualmente como dices, es una situación que poco sucede. Al mediano plazo lo bueno sería ir agregando clientes como te aconsejan.... Pero... si vez que esto se escapa de las manos la opción es alterar la estructura y hacer los ajustes necesarios. (1)

(1) Esta tendría que haber sido la opción que debería haberse llevado en mi ex trabajo (ya no trabajo). Te comento lo que ha sucedido en mi caso: el dueño del negocio había cerrado por 3 años. Abrió de nuevo y la mayoría de los proveedores que tenía habian cambiado de razón social, o desaparecieron... como al momento de cerrar había quedado mercadería a vender.. siguió con eso... ¿que pasó? La lista de los proveedores y la de los materiales que entregaron, sumado al hecho de que no se tenía cargado registros de las ventas y compras del ejercicio anterior (y por consiguiente algunos de los nuevos) hizo un gran lio. La solución: agregar los nuevos clientes y asociarlos con las nuevas mercaderías e investigar a mano (si a mano) cada caso en particular con aquellos viejos proveedores y sus mercaderias (mediante factura en mano) Bueno hize mi tarea, quedó bonito. Me tomó un mes conseguir armonizarla. Cumplida mi tarea bueno... el resto es historia. El que diseñó el sistema reconoce que actualmente la base de datos no estaba preparada para esa situación.

Es por ello, en base a mi experiencia en aquella oportunidad, que me digo a mi mismo preparate a las consecuencias. Y por ello defiendo mi idea de que tengas esa tabla de movimientos (aunque estoy abierto a escuchar otras)

Con respecto a tu duda de como hacer el reporte es así: deberías cruzar los datos con la tablas h_cliente, y puede que también con la cliente.

No conozco algún sitio que trate estos asuntos. Si lo hay, avisen que esto ya me intriga.

Bueno... se que dije poco en esta oportunidad. No quiero que esto se convierta en un monólogo... a ver... quisiera que otros comentasen al respecto.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 06-11-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
¿Porqué no existe la relación muchos a muchos en base de datos?

Buen día, buenas tardes, y/o buenas noches a todos.

Hace poco he dado una respuesta en YR y considero, a mi entender, que posiblemente lo dicho en aquella oportunidad sería un buen complemento a lo expuesto en este extenso hilo.
Me pareció justo exponerlo aqui pues puede que a alguien le sirva. No creí conveniente iniciar un nuevo hilo debido a que algo del tema puede estar relacionado con esto...

Bueno... se que no soy de las mejores palabras. No me creo dueño de la verdad, pero en fin... si no suena tan tonto lo que digo, algo de sentido debe tener. Aqui vá:

¿Porqué no existe la relación muchos a muchos en base de datos?

Cita:
Una relación M:M siempre puede romperse con la ayuda de una tabla intermedia. Esta tabla intermedia aunque no lo creas existe en el dominio del problema pero en un nivel de abstracción mayor que el visto inicialmente.

A ver si se me entiende:
El diseño de un DER responde a un estudio o análisis de un problema, de una realidad. A lo que en la jerga denominamos dominio. Tanto en la POO como en el diseño de un DER seguimos una simple regla: designación de responsabilidades. Esto es un paradigma que se ajusta muy bien en la gran mayoría de las veces cuando uno estudia un problema. A cada entidad (una tabla, o un objeto si estamos en POO) se le asocia la responsabilidad de suministrar la información que le compete, como sucede en la mayoría de las veces la información está ligada y dispersada por distintas entidades. Y esí como uno va formando relaciones entre las distintas entidades hasta responder a las necesidades del problema o dominio a resolver.
El problema de M:M debe verse como un suceso general (en una expresión del tiempo a futuro) Futuro entendido como un resumen de varios sucesos que sucedieron en distintos instantes del tiempo (la tabla intermedia). Es decir que el modelo que se entiende por M:M es un resumen realizado auna parte del dominio. Este resumen (la relación 1:M entre alguna la tabla A y la intermedia) hace referencia entonces a una situación que abarca diferentes valores en distintos momentos. La tabla intermedia está alli para mantener guardado detalladamente cada instancia o suceso. Cada posible combinación entre ambas entidades. En objetos diríamos que un suceso M:M está formado por una colección de INSTANCIAS de dos o más entidades. Cada instancia es un suceso único. Recuerda que una instancia existe por un período de tiempo relativamente breve.
Velo así: su muchos vendedores pueden vender muchos muebles y muchos muebles pueden ser vendidos, pero esto no quiere decir que en un MISMO INSTANTE de tiempo TODOS los vendedores van a vender TODOS los muebles.
Aquella parte del problema que ha sido expresada en forma genérica debe ser detallada. Uno se pregunta ¿Pero como es posible concebir que todos venden a la misma vez? ¿No será que un instante del tiempo un vendedor vende x muebles? Ahora si... Aquello que se ha entendido en el dominio como algo genérico está formado por una serie de sucesos que unidos entre si responden a una situación global.
Se ha necesitado cambiar el nivel de abstracción para entender cada suceso del problema. En algunas ocasiones es fácil encontrar el nombre adecuado para dicha tabla intermedia (mejor dicho encontrar el nombre para ese nivel de abstracción del dominio), en otras ocasiones no es tan sencillo. Pero siempre es posible llegar a entender la entidad que hace a cada instancia de A y B única en un instante de tiempo.
En fin: una relación M:M no es más que un caso especial en el que se desea conocer la información global entre tres entidades (A, B y la intermedia)

No se si se me entienda. Sólo quiero hacerte saber que a pesar de que el mundo real existan asociacones de M:M, existe una particularidad en dicha relación general.
El tema original lo pueden ver aquí.

Ojo. No es por hacerme publicidad, me pareció que puede ser útil. Si no es conveniente exponer el contenido borro el mensaje.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 06-11-2007 a las 19:10:00.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Combinar información de dos tablas ContraVeneno SQL 2 04-08-2005 18:20:14
Mas informacion sobre ECO II... Epachsoft Noticias 1 01-07-2005 19:15:10
informacion sobre estructura de tablas paradox e indice px chuley Tablas planas 2 06-04-2005 03:42:37
Recuperacion de informacion Tablas paradox andresenlared Tablas planas 1 14-08-2004 13:08:10
Información sobre Rx bbjb OOP 2 13-01-2004 19:13:49


La franja horaria es GMT +2. Ahora son las 21:49:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi