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

Select a tres tablas mmmm

Estas en el tema de Select a tres tablas mmmm en el foro de Bases de Datos General en Foros del Web. ALTER PROCEDURE [dbo].[MostrarPersona] AS BEGIN @cod int Select * from Persona, Persona_fisico, Persona_juridica Where Persona.pe_cod = @cod and Persona.pe_cod = Persona_fisico.pe_cod or Persona.pe_cod = Persona_juridica.pe_cod ...
  #1 (permalink)  
Antiguo 15/01/2009, 16:59
Avatar de normandos  
Fecha de Ingreso: diciembre-2001
Mensajes: 216
Antigüedad: 22 años, 4 meses
Puntos: 0
Select a tres tablas mmmm

ALTER PROCEDURE [dbo].[MostrarPersona]
AS
BEGIN
@cod int
Select *

from Persona, Persona_fisico, Persona_juridica

Where
Persona.pe_cod = @cod
and
Persona.pe_cod = Persona_fisico.pe_cod
or
Persona.pe_cod = Persona_juridica.pe_cod
END

Tengo tres tablas
PERSONA (Pe_cod, pe_nombre, etc)
PERSONA_FISICA (Pe_cod, Pe_documento_numero)
PERSONA_JURIDICA (Pe_cod, Pe_RUT)

Tengo problemas en mi select ya que cuando inserto una persona relleno la tabla Persona y una de las dos restantes, ya sea PERSONA_FISICA (si la persona es fisica) o PERSONA_JURIDICA (si la misma es juridica), por lo tanto una de las dos ultimas no tendra datos.
AL recuperar los datos no me funciona el select de arriba.
Alguna idea?
Muchas gracias.
__________________
"No importa lo que nos suceda sino cómo reaccionamos ante lo que nos sucede."

Presidente James E. Faust
  #2 (permalink)  
Antiguo 16/01/2009, 07:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Select a tres tablas mmmm

Ese diseño suena mucho a modelo relacional sin pasarlo a modelo fisico de datos pero....

Código:
Select *
from (Persona LEF JOIN Persona_fisico
           on Persona.pe_cod = Persona_juridica.pe_cod)
           LEF JOIN Persona_juridica
                 on Persona.pe_cod = Persona_fisico.pe_cod
Where  Persona.pe_cod = @cod;
El modelo relacional de especialización se traduce a un modelo físico mas simple.

Personas (Pe_cod, pe_nombre,... etc..., documento, pfisicaojuridica)

donde pfisicaojuridica es igual a F o J segun sea el caso, o quizas ni hace falta si se puede diferenciar por la forma del documento.... lo que lo simplifica todo mucho.... lee te este hilo http://www.forosdelweb.com/f86/base-datos-con-relacion-especializacion-650079/
al final tienes un link a un buen manual.
Quim

Última edición por quimfv; 16/01/2009 a las 08:02
  #3 (permalink)  
Antiguo 16/01/2009, 17:50
Avatar de normandos  
Fecha de Ingreso: diciembre-2001
Mensajes: 216
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: Select a tres tablas mmmm

Me da un error cerca del From (SP de sql server 2005)...no lo puedo encontrar.
Les puse las "T" a LEFT, luego no encontré mas nada mal.

Pasé todo a modelo físico como me dijiste, me simplificó bastante las cosas... yo pensaba que había normalizado bien =(
__________________
"No importa lo que nos suceda sino cómo reaccionamos ante lo que nos sucede."

Presidente James E. Faust

Última edición por normandos; 18/01/2009 a las 19:25
  #4 (permalink)  
Antiguo 19/01/2009, 03:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Select a tres tablas mmmm

Lo siento por las T, vaya cabeza la mia....


Cita:
Me da un error cerca del From (SP de sql server 2005)...no lo puedo encontrar.
Muestra me que sentencia usas....

Quim
  #5 (permalink)  
Antiguo 19/01/2009, 16:11
Avatar de normandos  
Fecha de Ingreso: diciembre-2001
Mensajes: 216
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: Select a tres tablas mmmm

la misma que tu me dejaste... solo agregué la T a LEFT.
De todas maneras como te decía ya pasé a "modelo físico" como me aconsejaste si bien aún no entiendo bien que es eso pero lo que si comparto es que simplifica los SP.
Mi duda sigue en pie: Había normalizado yo mal?
Muchas gracias
__________________
"No importa lo que nos suceda sino cómo reaccionamos ante lo que nos sucede."

Presidente James E. Faust
  #6 (permalink)  
Antiguo 20/01/2009, 02:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Select a tres tablas mmmm

Código:
Select *
from (Persona LEFT JOIN Persona_fisica
           on Persona.pe_cod = Persona_juridica.pe_cod)
           LEFT JOIN Persona_juridica
                 on Persona.pe_cod = Persona_fisica.pe_cod
Where  Persona.pe_cod = @cod;
Como no sea la a de fisica otro error ortográfico.

Cita:
(SP de sql server 2005)...
No se que caracteristicas especiales puede tener ese motor....


En cuanto a la normalización, si me equivoco que alguien me corrija, pero el modelo logico lo tienes bien normalizado pero despues viene el paso al modelo fisico es lo que no habias hecho...


Cita:
¿Qué tan lejos debe llevar la normalización?

La siguiente decisión es ¿qué tan lejos debe llevar la normalización? La normalización es una ciencia subjetiva. Determinar las necesidades de simplificación depende de nosotros. Si nuestra base de datos va a proveer información a un solo usuario para un propósito simple y existen pocas posibilidades de expansión, normalizar los datos hasta la 3FN quizá sea algo exagerado. Las reglas de normalización existen como gugas para crear tablas que sean fáciles de manejar, así como flexibles y eficientes. A veces puede ocurrir que normalizar los datos hasta el nivel más alto no tenga sentido.

...

Mira tambien la Pagina 11

Quim
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 11:24.