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

[SOLUCIONADO] Duda sobre normalización (otra)

Estas en el tema de Duda sobre normalización (otra) en el foro de Bases de Datos General en Foros del Web. Aca voy de nuevo, disculpen! jaja Tengo una tabla de Cuentas Otra de Personas_Juridicas y otra de Personas_Fisicas Cada tabla de personas tiene atributos particulares.. ...

  #1 (permalink)  
Antiguo 28/08/2013, 09:26
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Duda sobre normalización (otra)

Aca voy de nuevo, disculpen! jaja

Tengo una tabla de Cuentas
Otra de Personas_Juridicas
y otra de Personas_Fisicas

Cada tabla de personas tiene atributos particulares..

El tema esta en que un registro en la tabla cuentas solo debe tener UNA persona asignada....

Supongamos que la persona juridica con id 4 es asignada a la cuenta 5

Cuando yo haga una consulta para obtener la persona asignada a dicha cuenta.... Como voy a saber si el id 4 corresponde a un registro de la tabla de personas juridicas o de personas fisicas???

La otra alternativa seria tener

Cuentas
-------------
id_persona_fisica
id_persona_juridica

y que uno de estos quedara vacio...

Alguna manera de solucionarlo de forma "prolija"?

Saludos!
  #2 (permalink)  
Antiguo 28/08/2013, 09:33
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda sobre normalización (otra)

podrias agregar un campo en cuentas que sea "tipo_persona" :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 28/08/2013, 09:37
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Si, es lo que habia pensado, mi duda es la complicacion que puede tener eso a la hora de hacercelo entender a un ORM jaja..

Porque ahi voy a tener que hacer las consultas a mano, ya que no se si es posible definir en el ORM (en este caso sqlalchemy), que F apunta a la tabla Personas_Fisicas y J significa que tiene que buscar ese registro en la tabla Personas_Juridicas!

Tenes idea si esto es posible en algun ORM que conozcas (ya que de ser asi, revisaria la documentacion de sqlalchemy)

Saludos!
  #4 (permalink)  
Antiguo 28/08/2013, 10:33
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Estuve Googleando, se llaman Asociaciones polimorficas... En donde una clave foranea puede responder a registros de tablas diferentes!....

Segun Michael Bayer (creado de sqlalchemy) esto no es muy correcto, pero se da en la mayoria de los casos... a mi me gustaria que el me dijera entonces... como es la manera correcta de hacerlo jaja.. Ya que segun el, frameworks como rails o django lo han implementado de esta manera!


Alguna opinion ??
  #5 (permalink)  
Antiguo 28/08/2013, 10:47
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda sobre normalización (otra)

si te funciona adelante, solo que tendrias que acomodar tu esquema por ti mismo jejeje y pues estaria bien que te dijera cual es el modo "correcto" :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 28/08/2013, 11:07
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Escuchaste hablar de arcos exclusivos? Es exactamente el problema que estoy planteando! lo acabo de encontrar googleando!.... Los arcos exclusivos son la situacion que tengo en frente!
  #7 (permalink)  
Antiguo 28/08/2013, 11:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda sobre normalización (otra)

http://books.google.com.mx/books?id=...0datos&f=false
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 28/08/2013, 11:57
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

jaja ya cai a ese libro hace un rato :P
  #9 (permalink)  
Antiguo 28/08/2013, 12:34
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: Duda sobre normalización (otra)

Cita:
Iniciado por korg1988 Ver Mensaje
Escuchaste hablar de arcos exclusivos? Es exactamente el problema que estoy planteando! lo acabo de encontrar googleando!.... Los arcos exclusivos son la situacion que tengo en frente!
Ten en cuenta que cuando te pones a tratar con "asociaciones polimórficas" y "arcos exclusivos", te estás saliendo del ámbito estricto de las bases de datos relacionales, ya que ninguno de ambos conceptos pertenecen al paradigma ERM o el EERM. Son terreno de la modelizacion de datos en programación, y si un ORM los admite, pero trabaja con una base de datos relacional, por detrás de lo que ves, habrá un esquema RBD normalizado.
Ahora bien, los llamados "arcos exclusivos", hasta lo que he estudiado, son casos especiales definidos a nivel de reglas de negocio, pero que siguen manteniendo el esquema de relación N:N.
Esto se basa en que una definición usual es: "entre dos entidades, puede haber N:N relaciones, pero sólo una válida al mismo tiempo.
Esto no se refleja a nivel estructural sino a nivel de datos en una BBDD relacional. Se trata de restricciones puestas a otros niveles, que no tienen impacto en la definición del modelo de datos. Son, en definitiva, reglas de negocio.
Todo el tema de estos asuntos es más terreno de programación que de BBDD, por cuanto es algo que se manifiesta con el uso de ciertas herramientas de software, y no con la estructura de tablas o SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 28/08/2013, 12:50
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Entonces llegando a este punto podriamos decir que lo unico que nos queda por hacer es manejarlo desde el lado de la programación (con una suerte de "solucion de compromiso"... o sea... verificar yo, del lado del codigo, que nunca se complete mas de un campo (en el caso del arco exclusivo)), ya que del lado de la estructura relacional, por lo visto, no hay mas nada que hacer....
Digamos, esto es un problema que tengo yo solo? por estoy haciendo algo mal?, o asi es como lo manejarias vos en el mismo caso?
Quiero que alguien me de una opinion practica y no solamente un pedazo de teoria que ya lei sumado al detalle de lo que estoy haciendo "mal" o no...
Porque sino parece que hablamos de politica, de lo que el gobierno de turno hace mal pero sin dar ninguna solucion u opcion!

Porque si tengo empresas y personas como mis clientes, y tengo la tabla cuentas, y cada cuenta pertenece a un solo cliente, que puede ser una persona o una empresa, entonces no queda otra que usar un arco exclusivo, y si segun decis vos (y he leido en otros lados), esto es una solucion a medias... entonces no entiendo!:.. Cual es la solucion PERFECTA? o no la hay?

Saludos! :)
  #11 (permalink)  
Antiguo 28/08/2013, 13:41
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: Duda sobre normalización (otra)

Probablemente la confusión que sientas es que estás intentando aplicar lógica de desarrollador y programador, a la arquitectura de datos, y son cosas basadas en criterios y modelos completamente distintos.
Toda la lógica que describes de esos dos elementos, es perfectamente comprensible cuando abstraes la estructura de datos, porque al trabajar en clases, objetos, y atributos de las clases, todo eso aplica.
Pero cuando se mira la arquitectura de datos desde el modelo relacional, esas cosas no existen, sino que uno como desarrollador de datos, le provee a la interfaz (el ORM) de los accesos y recursos que necesita para transformar la base de datos relacional, en una serie de estructuras que el ORM maneja.
En ese sentido, el modelo de datos es, en la jerga de desarrollo, "transparente". es decir, invisible.
¿Cómo se compatibiliza?
Bueno, si acudes a la metodología de las consultoras que hacen estos desarrollos, verás que el mismo equipo no es el que hace ambas cosas. Sólo comparten ciertas interfaces, pero quienes ven la arquitectura del software, en realidad nunca ven los datos puros ni sus estructuras.
Somos ambientes separados.
Cita:
Cual es la solucion PERFECTA? o no la hay?
Esa respuesta es la clase 1, del tema 1, de Herramientas y Procesos de Software en la universidad donde estudio: No existe.
Existen métodos y tecnologías más o menos funcionales y útiles según las necesidades y la capacidad de quien las usa. Pero no existe un método "mejor".
Lo mejor es lo que te resulta útil.

En cuanto al sistema que desarrollas, se peude implementar, a mi entender, con cualquiera de los modelos: El que propones tu, o el que usamos nosotros en otros proyectos, o incluso puedes crear un modelo propio. en tanto los resultados sean los que esperas, será el mejor modelo.

Dicho en pocas palabras: ¿DOminas ese modelo de relaciones polimórficas y los arcos exclusivos.
Entonces úsalos. Pero usa las herramientas apropiadas (lenguaje, frameworks, etc), porque donde intentes ponerte a compatibilizar cosas que no dominas, tendrás problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 29/08/2013, 07:22
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda sobre normalización (otra)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Probablemente la confusión que sientas es que estás intentando aplicar lógica de desarrollador y programador, a la arquitectura de datos, y son cosas basadas en criterios y modelos completamente distintos.
Toda la lógica que describes de esos dos elementos, es perfectamente comprensible cuando abstraes la estructura de datos, porque al trabajar en clases, objetos, y atributos de las clases, todo eso aplica.
Pero cuando se mira la arquitectura de datos desde el modelo relacional, esas cosas no existen, sino que uno como desarrollador de datos, le provee a la interfaz (el ORM) de los accesos y recursos que necesita para transformar la base de datos relacional, en una serie de estructuras que el ORM maneja.
En ese sentido, el modelo de datos es, en la jerga de desarrollo, "transparente". es decir, invisible.
¿Cómo se compatibiliza?
Bueno, si acudes a la metodología de las consultoras que hacen estos desarrollos, verás que el mismo equipo no es el que hace ambas cosas. Sólo comparten ciertas interfaces, pero quienes ven la arquitectura del software, en realidad nunca ven los datos puros ni sus estructuras.
Somos ambientes separados.

Esa respuesta es la clase 1, del tema 1, de Herramientas y Procesos de Software en la universidad donde estudio: No existe.
Existen métodos y tecnologías más o menos funcionales y útiles según las necesidades y la capacidad de quien las usa. Pero no existe un método "mejor".
Lo mejor es lo que te resulta útil.

En cuanto al sistema que desarrollas, se peude implementar, a mi entender, con cualquiera de los modelos: El que propones tu, o el que usamos nosotros en otros proyectos, o incluso puedes crear un modelo propio. en tanto los resultados sean los que esperas, será el mejor modelo.

Dicho en pocas palabras: ¿DOminas ese modelo de relaciones polimórficas y los arcos exclusivos.
Entonces úsalos. Pero usa las herramientas apropiadas (lenguaje, frameworks, etc), porque donde intentes ponerte a compatibilizar cosas que no dominas, tendrás problemas.
Excelente Respuesta :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 30/08/2013, 06:27
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Probablemente la confusión que sientas es que estás intentando aplicar lógica de desarrollador y programador, a la arquitectura de datos, y son cosas basadas en criterios y modelos completamente distintos.
Toda la lógica que describes de esos dos elementos, es perfectamente comprensible cuando abstraes la estructura de datos, porque al trabajar en clases, objetos, y atributos de las clases, todo eso aplica.
Pero cuando se mira la arquitectura de datos desde el modelo relacional, esas cosas no existen, sino que uno como desarrollador de datos, le provee a la interfaz (el ORM) de los accesos y recursos que necesita para transformar la base de datos relacional, en una serie de estructuras que el ORM maneja.
En ese sentido, el modelo de datos es, en la jerga de desarrollo, "transparente". es decir, invisible.
¿Cómo se compatibiliza?
Bueno, si acudes a la metodología de las consultoras que hacen estos desarrollos, verás que el mismo equipo no es el que hace ambas cosas. Sólo comparten ciertas interfaces, pero quienes ven la arquitectura del software, en realidad nunca ven los datos puros ni sus estructuras.
Somos ambientes separados.

Esa respuesta es la clase 1, del tema 1, de Herramientas y Procesos de Software en la universidad donde estudio: No existe.
Existen métodos y tecnologías más o menos funcionales y útiles según las necesidades y la capacidad de quien las usa. Pero no existe un método "mejor".
Lo mejor es lo que te resulta útil.

En cuanto al sistema que desarrollas, se peude implementar, a mi entender, con cualquiera de los modelos: El que propones tu, o el que usamos nosotros en otros proyectos, o incluso puedes crear un modelo propio. en tanto los resultados sean los que esperas, será el mejor modelo.

Dicho en pocas palabras: ¿DOminas ese modelo de relaciones polimórficas y los arcos exclusivos.
Entonces úsalos. Pero usa las herramientas apropiadas (lenguaje, frameworks, etc), porque donde intentes ponerte a compatibilizar cosas que no dominas, tendrás problemas.
Excelente respuesta realmente, es casi lo que esperaba! Por lo visto una base de datos relacional tiene sus falencias si se lo ve desde un punto de vista objetos... Quizas otro sistema de bases de datos me permitiria tener 100% compatibilizado mi codigo con mi infraestructura de datos!. Algún sistema orientado a documentos u objetos (por decir algo).. Porque de esta manera parece que siempre voy a tener alguna incongruencia, ya sea del lado del codigo como del lado de la estructura de datos

Saludos!
  #14 (permalink)  
Antiguo 30/08/2013, 07:57
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: Duda sobre normalización (otra)

Hablar de falencias es exagerado. Me parece que sigues mirando el tema desde la óptica del programador, y ese es un error. El análisis de datos es total y completamente distinto. Sigue otras lógicas y otros razonamientos.
Estás planteando el tema como si la base de datos debiese forzosamente ser una representación del modelo de clases y eso no es cierto. La base datos debe alimentar a las aplicaciones, pero no debe ser necesariamente un reflejo de ella. No existe ninguna razón teórica que sustente una afirmación así. En realidad el acoplamiento que estás mencionando se considera siempre pernicioso a nivel de sistemas, ya que no permite precisamente evoluciones o cambios de perspectiva, de software o adaptaciones futuras. Termina volviendose rígido.
Si existen sistemas de bases orientados a objetos, que puede ser algo que te resulte útil a tu orientación y dominio, pero eso no significa que una base de datos relacional tenga "falencias", o que posea "incongruencias".
Es común, y constantemente lidiamos con esto, que los programadores y desarrolladores de aplicaciones no entiendan el paradigma relacional, porque todos ven los datos como flujos de proceso, y para nosotros (como analistas de datos), los procesos no existen. Y esa distinción es algo muy difícil de asimilar para quien no se interna en las bases de datos.

En definitiva, u sistema de base de datos relacional puede perfectamente ser el soporte de un sistema orientado a objetos, siempre que uses las herramientas adecuadas para que ambas cosas interactuen.
Te imaginas que si ese tipo de relaciones existe en todas partes, es porque no existen las "incongruencias" que temes...
¿No te parece?

Como sugerencia final, si quieres usar un sistema de bases de datos no relacionales, orientada a objetos, siempre puedes usar NoSQL, Zope (Python), o bien usar mapeos objeto-relacionales como Hibernate (Java) o Doctrine (PHP).
lo que quiero que entiendas es que ya existen soluciones para tu problema, y no pasan por descartar el modelo relacional, sino que trabajan colaborativamente, cada una de las cosas en su respectivo ámbito.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 30/08/2013, 08:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda sobre normalización (otra)

Aqui como bien menciona gnzsoloyo es que estas viendo tu problema desde el ambito del desarrollador, y ps ahi si vas a encontrar incongruencias, las cuales no son consideradas desde la base de datos, la solucion que se te planteo es la indicada para la base de datos, y como dicen la aplicacion debe de adaptarse a la base de datos no la base de datos a la aplicacion :)

saludos,
Libras
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 30/08/2013, 08:17
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Entiendo perfectamente lo que decis.. De hecho hasta hoy he utilizado sqlalchemy ya que programo en python, y mongodb en varios sistemas.
Mi pregunta final, y espero no molestarte mucho mas, es la siguiente:
Si yo tengo la siguiente tabla..

Personas
-------------
nombre
apellido
razon_social
tipo_persona

y mis tipos de persona son F(fisica), y J (juridica), supongamos que ahora creo dos registros..
Uno tiene el tipo de persona en F y el otro en J
Ahora resulta que las personas con tipo F, solo pueden tener completos los campos apellido y nombre
y las personas que tienen tipo J, solo pueden tener completo el campo razon_social

Ahora bien... eso no es algo que este terriblemente mal?? Porque mas arriba se hablaba de integridad de datos con respecto a los arcos exclusivos.... Para mi, que un registro tenga campos que no van... es un problema tremendo, porque habla de propiedades de una entidad que no pertenecen a determinados registros en esa tabla!...

Para mi la solucion seria tener las siguientes tablas

Personas_Juridicas
------------------------
razon_social

Personas_Fisicas
------------------------
nombre
apellido


y asi quedaria bien... pero necesitaria tener 300000 tablas dentro de una base de datos para poder manejar las relaciones que habria dentro de un sistema!:..

A lo que voy entonces es... La integridad de datos tiene que quedar definida dentro de la base de datos?? (hablo sin pensar en procesos).... porque si es asi, entonces no se de que manera armar mi base de datos, y todo lo que he hecho estos años esta tirado por la ventana!...
Ya que no encuentro la manera de modelar mis datos en una base de datos relacional sin tener incoherencias como la siguiente:
Si tengo una tabla de vehiculos, y una tabla de tipos de vehiculos, en los tipos puede estar definido tanto un Camion, como una Bicicleta... Entonces en la tabla de vehiculos tengo un campo de cantidad de acoplados.... Si el registro es de tipo Camion, cantidad de acoplados va a ser 2 por ejemplo... pero si el registro de vehiculo, tiene relacionado un tipo Bicicleta... va a tener tambien un campo cantidad de acoplados que va a estar vacio!...
Si alguien viene, y manualmente pone un numero 3.... Ahora mi bicicleta tiene 3 acoplados !!!
Y ahi no veo ningun proceso, ni codigo, ni nada!

Gracias!
  #17 (permalink)  
Antiguo 30/08/2013, 08:43
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: Duda sobre normalización (otra)

Cita:
y asi quedaria bien... pero necesitaria tener 300000 tablas dentro de una base de datos para poder manejar las relaciones que habria dentro de un sistema!:..
No.
Un sistema, como en el que actualmente trabajo, que administra la totalidad de ventas mayoristas, minoristas, cuentas, clientes de todo tipo imaginable, proveedores, facturación, sistemas de pagos, etc. de una entidad que opera a nivel nacional (de punta apunta del país) e incluso con operaciones internacionales y transacciones que aplican a acciones planetarias (y no exagero), administra su operación minorista comercial entera, con con... 622 tablas. Y la extendida (todo el sistema) involucra alrededor de 2.000 más.
Obviamente, estoy hablando del diseño de datos. No de servidores, ni estructuras administrativas o aplicaciones y demás.
Pero la dedicada a las personas jurídicas, impuestos, sistemas de pago, clientes y otras yerbas semejantes, son apenas unas 20, de las cuales media docena administran completamente el sistema de personas.
En tu caso, con dos tablas básicas, mas las tabla padre (que contiene los datos comunes), es suficiente.
Cita:
A lo que voy entonces es... La integridad de datos tiene que quedar definida dentro de la base de datos?? (hablo sin pensar en procesos).... porque si es asi, entonces no se de que manera armar mi base de datos, y todo lo que he hecho estos años esta tirado por la ventana!...
Ya que no encuentro la manera de modelar mis datos en una base de datos relacional sin tener incoherencias como la siguiente:
Si tengo una tabla de vehiculos, y una tabla de tipos de vehiculos, en los tipos puede estar definido tanto un Camion, como una Bicicleta... Entonces en la tabla de vehiculos tengo un campo de cantidad de acoplados.... Si el registro es de tipo Camion, cantidad de acoplados va a ser 2 por ejemplo... pero si el registro de vehiculo, tiene relacionado un tipo Bicicleta... va a tener tambien un campo cantidad de acoplados que va a estar vacio!...
Si alguien viene, y manualmente pone un numero 3.... Ahora mi bicicleta tiene 3 acoplados !!!
Y ahi no veo ningun proceso, ni codigo, ni nada!
Más allá de que hay que analizar el sistema con definiciones tangibles de las reglas de negocio (sin lo cual no hay análisis que sirva), te estás ahogando en dedales de agua.
No lo estás pensando ni siquiera a nivel de objetos, entonces se te producen confusiones bastante simples.

Veamos así:
Un vehículo es cualquier unidad u objeto no biológica que pueda desplazarse una distancia X en un tiempo T, y transportar un peso P agregado a su propio peso.
El que tenga ruedas o hélice, o motor fuera de borda, es en primera instancia irrelevante.
Pero la existencia de diferentes tipos de medio en donde el vehículo se desplaza, nos habla de que hay "Clases" o "Categorías" de vehículos. Aire, agua o tierra.
Si lo afinas más, existe una subcategoría en VehiculoTierra que es la tipología: Camión, Auto, Motocicleta, Triciclo, Bicicleta, y si quieres ponemos las patinetas.
Pero por lo pronto, cuando diseñas un sistema no estás creando un sistema de uso universal, algo para que se ingrese cualquier cosa. Le pones restricciones que tienen que ver con las reglas de negocio, entonces si tienes un sistema de administración de taxis, jamás tendrás camiones, motocicletas o bicicletas. Nuca. Y eso se restringe de dos modos: 1) Existen entidades fijas que se usan para restringir el dominio de ciertos atributos de otras entidades. y 2) Esas mismas entidades se usan para alimentar a la aplicación tal que restrinja el ingreso de datos que no deben existir.
¿Se entiende?
Además, cuando analizas más fino aún, verás que si un remolque sólo puede pertenecer a un camión, y no a una bicicleta, la solución se cae de cajón: 1) Si es un remolque, sólo se puede relacionar con un vehículo de la subclase camión, y 2, el mismo camión no puede relacionarse más de una (o dos, según la categoría o modelo de camión) con un camión dado al mismo tiempo.
¿Se va entendiendo?
Este tipo de análisis no puede hacerse en el aire. Hay que escribirlo. Siempre. debe documentarse y definirse claramente cuáles son las reglas, para verificar qué condiciones deben cumplir los datos en la base, y qué requerimientos tendrá la aplicación y las clases controladoras al momento de diseñar las vistas donde estos datos entran o se procesan.
En otras palabras, esto no se soluciona desde un sólo lado, sino que debe hacerse desde ambos.
En la aplicación, los controladores y las entidades, y sus instanciaciones, permiten diseñar las restricciones claramente. En la estructura de datos, existen métodos y técnicas de normalización que permiten mantener la consistencia e integridad de los datos. Y esa integridad de datos debe ser protegida por la base, que siempre debe evitar que el programador intente cosas que no debe hacer.
¿Cómo?
Simple (y largo de hacer): Se usan stored procedures para revalidar lo validado y proteger la base.
No te olvides: Datos "sucios", implica siempre pérdida de información y desastres. Por eso, entre otras cosas, los analistas de datos somos tan estrictos: Protegemos el negocio.
Si nosotros fallamos, siendo la última defensa del sistema, el sistema se cae.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 30/08/2013 a las 08:49
  #18 (permalink)  
Antiguo 30/08/2013, 08:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda sobre normalización (otra)

vamos por partes, aqui lo que pasa es que sigues pensando en el modelado como una aplicacion no como una base de datos, en una base de datos es valido que tengas que un campo es NULL y que otros campos se llenen con informacion dependiendo de si es de un tipo o de otro, en lo que mencionas que "manualmente" eso se supone que solo el DBA puede hacer, ningun usuario podria meter informacion, ahora tambien podrias poner un Constraint en donde diga por ejemplo si vehiculo=bicicleta then acoplados=0 y este valor no se podria cambiar.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #19 (permalink)  
Antiguo 30/08/2013, 09:14
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Para hacerlo mas grafico:

Aca esta un pedazo de mi diseño, en el cual tengo las cuentas unificadas en una tabla..
Los movimientos de las cuentas tambien en una misma tabla, y todo en si unificado... diferenciandolo por claves foraneas a tablas maestras de "tipos de cuentas", "tipos de formas de pago", etc...



Ahora, cuando empece con este problema, transforme lo anterior, en entidades separadas... tengo todo un area de tablas para "cuentas de cliente", y toda otra area de tablas para cuentas de proveedores, y asi.... El tema es que se multiplican exponencialmente la cantidad de tablas


Con cual metodo estoy mas acertado??
Ya que de la segunda forma... yo acceso a un registro de la tabla cuentas_cliente. y se que es una cuenta cliente... con sus datos, y ni un pelo mas!

En cambio...En la tabla "cuentas" universal... dependo del campo "tipo_cuenta"... y ahi voy a tener campos que no son para todas las cuentas!

Esa es mi duda! De que manera modelar mis datos correctamente! (pensando unicamente en la base de datos)


PD: Tinypic me redujo el tamaño de las imagenes asi que aca van en tamaño completo
https://dl.dropboxusercontent.com/u/..._separadas.png
https://dl.dropboxusercontent.com/u/...unificadas.png
  #20 (permalink)  
Antiguo 30/08/2013, 09:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda sobre normalización (otra)

tienes muchas inconsistencias en tus datos jejejeje

por ejemplo veo que tienes
movimientos cliente y la de relaciones_movimientos cliente

aqui podrias dejar una sola tabla de moviemientos agregando la fecha de inicio y la fecha de fin del movimiento asi como el monto_inicio y monto_fin(en caso de que no se calcule)

la de cuentas cliente la puedes unir con la de documentos del las 2 guardan relacion al cliente por lo que puedes poner la informacion en una misma tabla

y asi nos podemos ir analizando tu diagrama :S
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #21 (permalink)  
Antiguo 30/08/2013, 09:41
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Esta bien tener por ejemplo estas tablas?
personas_juridicas,
cuentas_cliente_personas_juridicas,
movimientos_cuentas_cliente_personas_juridicas,
formas_pago_cuentas_cliente_personas_juridicas,
cuentas_proveedor_personas_juridicas,
movimientos_cuentas_proveedor_personas_juridicas,
formas_pago_cuentas_proveedor_personas_juridicas

personas_fisicas,
cuentas_cliente_personas_fisicas,
movimientos_cuentas_cliente_personas_fisicas,
formas_pago_cuentas_cliente_personas_fisicas,
cuentas_proveedor_personas_fisicas,
movimientos_cuentas_proveedor_personas_fisicas,
formas_pago_cuentas_proveedor_personas_fisicas

O es mas correcto tener
personas,
tipos_persona,
cuentas,
tipos_cuenta,
movimientos,
formas_pago, etc

De la primera forma, tendria una puresa tremenda en cuanto a atributos de las tablas, ya que cada tabla tendria los atributos que debe tener y nada mas... Pero tendria mil tablas
De la segunda forma, tendria menos tablas pero montones de atributos que no corresponden a todos los registros dentro de esas tablas..
Volvemos al principio, necesito un ejemplo mas practico, y no teoria que no me ayuda a terminar de cerrar mi duda, porque sino, leyendo un libro hubiese subsanado mi duda y no estaria molestandolos!
  #22 (permalink)  
Antiguo 30/08/2013, 09:47
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: Duda sobre normalización (otra)

Lo voy a analizar en casa, esta noche, pero en principio, estás cayendo en una sobrenormalización. Estás atomizando innecesariamente las relaciones y declarando entidades que pueden consolidarse de un modo más orgánico.
tarat de despejar la mente, y visualizar de nuevo las estructuras globales. No generes entidades si efectivamente no hay atributos distintivos que las identifique. Cuando parte de ellos sean los mismos que en otra del mismo orden, es que estás haciendo una particion incorrecta.
Esta noche lo miro con más tranquilidad (horas de trabajo :P).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #23 (permalink)  
Antiguo 30/08/2013, 09:47
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda sobre normalización (otra)

para un ejemplo mas practico se necesitaria conocer las reglas de negocio que vas a manejar, seria hacer una analisis a detalle de tu base de datos, o a que te refieres con un ejemplo mas practico? La normalizacion de una base de datos depende tanto de los atributos de las tablas como de las reglas de negocio que vas a utilizar..
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #24 (permalink)  
Antiguo 30/08/2013, 09:49
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Cita:
Iniciado por Libras Ver Mensaje
tienes muchas inconsistencias en tus datos jejejeje

por ejemplo veo que tienes
movimientos cliente y la de relaciones_movimientos cliente

aqui podrias dejar una sola tabla de moviemientos agregando la fecha de inicio y la fecha de fin del movimiento asi como el monto_inicio y monto_fin(en caso de que no se calcule)

la de cuentas cliente la puedes unir con la de documentos del las 2 guardan relacion al cliente por lo que puedes poner la informacion en una misma tabla

y asi nos podemos ir analizando tu diagrama :S
Libras, pase 2 modelos de datos distintos!... con lo que estoy planteando desde el primer mensaje!...
Fijate que uno de esos tiene lo que vos decis!... Una unica tabla por cada tipo "global" de dato... Una tabla de cuentas, una tabla de movimientos, etc
Pero yo queria buscar una forma de eliminar los campos que no corresponden al super tipo y si al subtipo.... Cuenta cliente, cuenta proveedor, etc...
Pero aun no hemos llegado a una solucion jeje
  #25 (permalink)  
Antiguo 30/08/2013, 09:56
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No generes entidades si efectivamente no hay atributos distintivos que las identifique. Cuando parte de ellos sean los mismos que en otra del mismo orden, es que estás haciendo una particion incorrecta.
Esta noche lo miro con más tranquilidad (horas de trabajo :P).
jaja, ok, pero lo que decis cuando te referis a atributos distintivos es lo que me pasa a mi!

Me decis que estoy sobrenormalizando pero despues me decis que si hay atributos distintivos tengo que separa!
Entonces tengo que tener dos tablas... una para personas fisicas y otra para personas juridicas... jaja porque no tienen los mismos atributos!
Ahora... como las relaciono con una tabla cuentas cuentas sin usar un arco exclusivo??
Porque tengo registros foraneos que pueden pertenecer a dos tablas!
  #26 (permalink)  
Antiguo 30/08/2013, 10:00
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Las reglas de negocio, como pide Libra, son sencillas jaja..
Tengo 2 tipos de personas (juridicas o fisicas), con atributos distintos...
Quiero tener 2 tipos de cuentas (proveedor, y cliente)..
Pero cualquiera de esas 2 tipos de personas puede ser proveedor o cliente y tener mas de un tipo de cuenta creada!..
Despues... hay movimientos, de cuenta corriente, basicos, muy basicos, para cada cuenta...
Fin XD
  #27 (permalink)  
Antiguo 30/08/2013, 10:13
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: Duda sobre normalización (otra)

Me temo que no estás entendiendo a qué nos referimos exactamente con "reglas de negocio".
Es un término técnico, usual en Análisis de Sistemas, que implica toda la lista de requisitos que se deben cumplir en cada acción del sistema, con sus descripciones de restricciones de datos y/o condiciones comerciales o administrativas que existan.
Estas listas abarcan:
- Tipos de cliente existen, las condiciones impositivas que tienen, sus datos obligatorios y competencias. Incluso se debe definir a qué se le denomina cliente, y a partir de qué acción una persona es cliente y / o cuando deja de serlo.
- Operaciones de venta que existan. Formas de pago y verificaciones que implican en cada caso.
- Tipos de documentación comercial y qué condiciones tienen de validez e invalidez.
- Sistemas de pago, moneda, imputaciones en cuentas.
- un lago etcétera.

Con ese tipo de listado (que usualmente se construye en entrevistas con los usuarios del sistema), es como se modela el sistema y se puede determinar qué se necesita para cumplirlo y soportarlo.

Decir, por ejemplo, que tienes dos tipos de cliente, no es cierto. Puedes tener clientes Físico y Jurídicos, pero cada uno de ellos puede tener N categorías, y según las categorías recibir o no beneficios, y además que sea una persona física no exime de que la facturación sea determinada, o que si es jurídico se le exija una si y otra no.
Además, si tienes cuentas de cliente, hay que definir qué tipos de cuentas usa el sistema, en qué contexto, con qué requisitos,y cómo operan.
No es lo mismo definir una cuenta corriente, que una cuenta a término, y tampoco sabemos cómo son los ciclos de facturación que las afectan.

Creo que con esta breve descripción puedes darte una idea de lo que estamos preguntando...

Y para que te quede un poco más claro, si, todo eso afectará el diseño de la estructura de la base de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #28 (permalink)  
Antiguo 30/08/2013, 11:37
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Pero no entiendo, es tan dificil ayudarme a diagramar de la mejor manera lo que planteo?
No importa que monedas manejan, no importa cuando empiezan o dejan de ser clientes... Solo quiero saber como guardar 2 tipos distintos de personas, que pueden tener 2 tipos distintos de cuentas, y sus respectivos movimientos por cuenta!
Sabiendo que un tipo de persona tiene nombre y apellido, y la otra persona no debe tener esos atributos!...
FIN, ahi termino todo jaja
en el resto de las tablas solo quiero que figuren las claves primarias y foraneas necesarias y ya!
Por favor!
  #29 (permalink)  
Antiguo 30/08/2013, 11:43
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 10 meses
Puntos: 19
Respuesta: Duda sobre normalización (otra)

Porque hasta ahora hemos dado teoria y no algo que me ayude :S, para leer teoria estan los libros, y ya he pasado por ahi, rescatado todo lo que he podido, y ahora estoy yo con mis dudas buscando una ayuda para solventarlas!
Si divido todo en tablas unicas estoy sobre normalizando!... y si junto todo en tablas generales como "clientes", "cuentas", etc... estoy juntando varios subtipos en una sola tabla superior y teniendo muchos campos que no deberian tener todos los registros de dicha tabla!

Entonces no me quedan mas alternativas en una base de datos relacional por lo visto! ... porque que otra cosa hay para hacer ademas de esas dos formas?
Me esta poniendo mal esto ya!
  #30 (permalink)  
Antiguo 30/08/2013, 12:01
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: Duda sobre normalización (otra)

Vamos por parte:
- Los libros no enseñan todo, la práctica en este rubro es muy importante, y la guia de gente que conoce el tema, lo es más.
- Estamos tratando de guiarte para que adquieras en un día, conocimientos prácticos y teóricos que llevan un año entero, ocho exámenes y dos finales en cualquier facultad que se precie. ¿Te parece que eso es fácil de dominar?

Puntualmente:
- Dividir todo en tablas únicas no es normalizar. Es fragmentar o dispersar la información, muchas veces de modo redundante. Si lo haces, es probable que debas rehacerlo de nuevo todo dentro de muy poco tiempo. Y lo digo por experiencia.
- No existen subtipos o supertipos en el modelo relacional, al menos del mismo modo que en POO. Existen entidades débiles y fuertes, que determinan dependencias funcionales. Las herencias en este modelo se representan físicamente como tablas que dependen por FK de su tabla "padre", pero una herencia también puede construirse, al momento de normalizar, en un atributo de valores acotados (set o enum), y no en una tabla. O bien en una tabla fija que actúa de constraint.
Cita:
Sabiendo que un tipo de persona tiene nombre y apellido, y la otra persona no debe tener esos atributos!...
Si sólo quieres saber eso, la cosa es simple: Se necesitan tres tablas, por lo menos: La tabla padre, que define la entidad persona,con los atributos comunes (y si, físicas y jurídicas comparten al menos dos: identidad fiscal y domicilio jurídico declarado). A esa se relacionan las dos que tienen los atributos exclusivamente propios de cada una.
Pero las tablas dependientes no tienen clave primaria propia, sino que heredan la del padre. Eso es MUY importante, para evitar llenar de basura la base.
La tabla de condición impositiva, se relaciona no a cada una de ellas, sino a la tabla padre, lo mismo que toda otra tabla que represente entidades vinculadas a su condición de cliente, y no a su condición de persona.
Cita:
en el resto de las tablas solo quiero que figuren las claves primarias y foraneas necesarias y ya
Eso es un error completo. No es simplemente "claves foráneas y ya". Si no se conoce qué representa, y cómo hacerlo, entonces no las puedes modelar. No relacionas cualquier cosa con cualquier cosa. A la noche te completo los conceptos, pero desde ya te digo que el manejo de pagos y cuentas que estás haciendo está decididamente MAL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: tabla
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 06:59.