tabla hija de dos

02/05/2005 - 16:41 por Imac_Man | Informe spam
saludos amigos

les planteo lo que deseo hacer y uds me orientan, please.


tengo dos tablas digamos casas y motocicletas luego una tabla que se llama
"caracteristicas". ahora bien las primeras dos tablas tiene su campo llave
respectivo, pero ambos son identicos, digamos que se llama codigo y es int;
ahora bien necesito que la tabla "caracteristicas" sea hija de las dos, es
decir que solo herede el campo "Codigo" una vez y que pueda recibir los
datos de cualquiera de las tablas padres ya sea "Casas" o "Motocicletas", no
se si es posible crear una relacion de esta indole.


gracias de antemano por su ayuda

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
02/05/2005 - 16:53 | Informe spam
Más allá de si se puede o no crear ese tipo de relación, en mi humilde
opinión es un diseño algo patológico el que tienes :-)

Características debería manejarse en forma separada como
CaracterísticasDeCasas y CaracterísticasDeMotocicletas.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.
"Imac_Man" wrote in message
news:u$
saludos amigos

les planteo lo que deseo hacer y uds me orientan, please.


tengo dos tablas digamos casas y motocicletas luego una tabla que se llama
"caracteristicas". ahora bien las primeras dos tablas tiene su campo llave
respectivo, pero ambos son identicos, digamos que se llama codigo y es
int; ahora bien necesito que la tabla "caracteristicas" sea hija de las
dos, es decir que solo herede el campo "Codigo" una vez y que pueda
recibir los datos de cualquiera de las tablas padres ya sea "Casas" o
"Motocicletas", no se si es posible crear una relacion de esta indole.


gracias de antemano por su ayuda

Respuesta Responder a este mensaje
#2 Imac_Man
02/05/2005 - 17:10 | Informe spam
jajaj, ok es verdad, pero ese es solo un ejemplo, en el momento que escribi
mi consulta fue el esquema mas familiar que se me ocurrio, la idea es tener
dos tablas padres y una hija. gracias de antemano

"Gustavo Larriera [MVP]" escribió en el mensaje
news:
Más allá de si se puede o no crear ese tipo de relación, en mi humilde
opinión es un diseño algo patológico el que tienes :-)

Características debería manejarse en forma separada como
CaracterísticasDeCasas y CaracterísticasDeMotocicletas.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.
"Imac_Man" wrote in message
news:u$
saludos amigos

les planteo lo que deseo hacer y uds me orientan, please.


tengo dos tablas digamos casas y motocicletas luego una tabla que se
llama "caracteristicas". ahora bien las primeras dos tablas tiene su
campo llave respectivo, pero ambos son identicos, digamos que se llama
codigo y es int; ahora bien necesito que la tabla "caracteristicas" sea
hija de las dos, es decir que solo herede el campo "Codigo" una vez y que
pueda recibir los datos de cualquiera de las tablas padres ya sea "Casas"
o "Motocicletas", no se si es posible crear una relacion de esta indole.


gracias de antemano por su ayuda





Respuesta Responder a este mensaje
#3 Alejandro Mesa
02/05/2005 - 17:32 | Informe spam
Si se puede hacer, lo que tendrias que agregar una columna mas a la tabla
[caracteristicas] para denotar cual es el tipo de entidad de la cual se esta
especificando las caracteristicas. Como el tipo no se sabe de antemano (puede
ser [casa] o [motocicleta]) y ademas en cada caso se debe chequear la
integridad referencial en distintas tablas, entonces el chequeo no se puede
hacer de forma declarativa sino usando triggers.

Ejemplo:

use northwind
go

create table t1 (
c1 int not null identity unique
)
go

create table t2 (
c1 int not null identity unique
)
go

create table t3 (
c1 int not null,
c2 char(1) not null check(c2 = 'c' or c2 = 'm')
constraint pk_t3 primary key (c1, c2)
)
go

create trigger tr_t3_ins on t3
for insert
as
set nocount on

if exists(select * from inserted as i where c2 = 'c' and not exists(select *
from t1 where t1.c1 = i.c1))
begin
raiserror('No se pueden insertar caracteristicas de una casa que no existe
en tabla t1.', 16, 1)
rollback transaction
return
end

if exists(select * from inserted as i where c2 = 'm' and not exists(select *
from t2 where t2.c1 = i.c1))
begin
raiserror('No se pueden insertar caracteristicas de una motocicleta que no
existe en tabla t2.', 16, 1)
rollback transaction
return
end
go

insert into t1 default values
insert into t2 default values
insert into t3 values(1, 'c')
insert into t3 values(1, 'm')
go

insert into t3 values(2, 'c')
go

insert into t3 values(2, 'm')
go

drop table t3, t1, t2
go

Esta tabla [caracteristicas] deberia tener columnas (atributos) existentes o
comunes a las tablas (entidades) [casa] y [motocicleta]. Las caracteristicas
no comunes o propias de la entidad deben estar en la tabla correspondiente.
Tambien debes crear triggers para validar la integridad referencial cuando
actualizas y cuando borras.

Para mas informacion sobre el tema, busca "Entidades Supertipos y Subtipos",
"Generalizacion y Categorizacion".


AMB


"Imac_Man" wrote:

saludos amigos

les planteo lo que deseo hacer y uds me orientan, please.


tengo dos tablas digamos casas y motocicletas luego una tabla que se llama
"caracteristicas". ahora bien las primeras dos tablas tiene su campo llave
respectivo, pero ambos son identicos, digamos que se llama codigo y es int;
ahora bien necesito que la tabla "caracteristicas" sea hija de las dos, es
decir que solo herede el campo "Codigo" una vez y que pueda recibir los
datos de cualquiera de las tablas padres ya sea "Casas" o "Motocicletas", no
se si es posible crear una relacion de esta indole.


gracias de antemano por su ayuda



Respuesta Responder a este mensaje
#4 Imac_Man
04/05/2005 - 17:21 | Informe spam
ok, muchas gracias por tu ayuda

"Alejandro Mesa" escribió en el
mensaje news:
Si se puede hacer, lo que tendrias que agregar una columna mas a la tabla
[caracteristicas] para denotar cual es el tipo de entidad de la cual se
esta
especificando las caracteristicas. Como el tipo no se sabe de antemano
(puede
ser [casa] o [motocicleta]) y ademas en cada caso se debe chequear la
integridad referencial en distintas tablas, entonces el chequeo no se
puede
hacer de forma declarativa sino usando triggers.

Ejemplo:

use northwind
go

create table t1 (
c1 int not null identity unique
)
go

create table t2 (
c1 int not null identity unique
)
go

create table t3 (
c1 int not null,
c2 char(1) not null check(c2 = 'c' or c2 = 'm')
constraint pk_t3 primary key (c1, c2)
)
go

create trigger tr_t3_ins on t3
for insert
as
set nocount on

if exists(select * from inserted as i where c2 = 'c' and not exists(select
*
from t1 where t1.c1 = i.c1))
begin
raiserror('No se pueden insertar caracteristicas de una casa que no existe
en tabla t1.', 16, 1)
rollback transaction
return
end

if exists(select * from inserted as i where c2 = 'm' and not exists(select
*
from t2 where t2.c1 = i.c1))
begin
raiserror('No se pueden insertar caracteristicas de una motocicleta que no
existe en tabla t2.', 16, 1)
rollback transaction
return
end
go

insert into t1 default values
insert into t2 default values
insert into t3 values(1, 'c')
insert into t3 values(1, 'm')
go

insert into t3 values(2, 'c')
go

insert into t3 values(2, 'm')
go

drop table t3, t1, t2
go

Esta tabla [caracteristicas] deberia tener columnas (atributos) existentes
o
comunes a las tablas (entidades) [casa] y [motocicleta]. Las
caracteristicas
no comunes o propias de la entidad deben estar en la tabla
correspondiente.
Tambien debes crear triggers para validar la integridad referencial cuando
actualizas y cuando borras.

Para mas informacion sobre el tema, busca "Entidades Supertipos y
Subtipos",
"Generalizacion y Categorizacion".


AMB


"Imac_Man" wrote:

saludos amigos

les planteo lo que deseo hacer y uds me orientan, please.


tengo dos tablas digamos casas y motocicletas luego una tabla que se
llama
"caracteristicas". ahora bien las primeras dos tablas tiene su campo
llave
respectivo, pero ambos son identicos, digamos que se llama codigo y es
int;
ahora bien necesito que la tabla "caracteristicas" sea hija de las dos,
es
decir que solo herede el campo "Codigo" una vez y que pueda recibir los
datos de cualquiera de las tablas padres ya sea "Casas" o "Motocicletas",
no
se si es posible crear una relacion de esta indole.


gracias de antemano por su ayuda



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