SoloCodigo

Bases de Datos => SQL Server => Mensaje iniciado por: .net en Martes 30 de Agosto de 2011, 16:27

Título: 2 FK a la misma tabla? se puede
Publicado por: .net en Martes 30 de Agosto de 2011, 16:27
Alguien sabe como puedo hacer 2 fk a la misma tabla??

Ayuda

Espero su respuesta
Por EJ.

tbl1                              tbl2
-------                   -------------
Id  < -----------|            Id
Empresa            |--> EmpresaM  fk
                       |--> EmpresaP   fk

y que ambas llaves tengan la regla de eliminacion -> Establecer en null
y la regla de actualizacion en cascada - > Cascada

se puede?
Título: Re:2 FK a la misma tabla? se puede
Publicado por: LuisYactayo en Jueves 1 de Septiembre de 2011, 22:45
Hola, :jumpie:
 dime a q te refieres cuando dices 2 FK a las misma tabla?
--------------
 Recuerda:  la clave foránea es clave principal en otra tabla
 Ejemplo:
 Dos tablas: CLIENTE(IDCLI, NomCli, Direccion, ...) y FACTURA(Numero,IDCLI, fecha, total,...)
  => IDCLI viene a ser clave foránea en la tabla FACTURA
  También es clave principal en la tabla CLIENTE.
--------------
Sorry, si ya lo sabias y fui muy detallado
-------------
 En todo caso puedes comentar cual es el caso q tienes y ver como podemos armar y relacionar esas tablas.

De todas maneras puedes insertar la clave foránea así:
Usando el ejemplo anterior:

 
Código: SQL
  1. ALTER TABLE FACTURA ADD CONSTRAINT FK_FACTURA_CLIENTES
  2. FOREIGN KEY (IDCLI) REFERENCES
  3. CLIENTES(IDCLI)
  4. ON DELETE SET NULL
  5. ON UPDATE CASCADE
  6.  
  7.  
   


Saludos...  :yes:
     
 
 
   
   
Título: Re:2 FK a la misma tabla? se puede
Publicado por: Fraggle en Viernes 9 de Septiembre de 2011, 02:48
Si te refieres a que si una tabla puede tener una relación doble con otra... sí, es posible.
En tu caso si EmpresaM es pongamos la empresa donde trabaja tu madre y EmpresaP, donde trabaja tu padre. Es posible relacionarlas con la tabla Empresa sin mayor problemas. Te doy el Script:

create table tbl1
(id int primary key,
empresa varchar(30))
create table tbl2
(id int primary key,
empresaM int,
empresaP int,
constraint fk5 foreign key (empresaM) references tbl1 (id),
constraint fk6 foreign key (empresaP) references tbl1 (id))
Título: Re:2 FK a la misma tabla? se puede
Publicado por: F_Tanori en Lunes 12 de Septiembre de 2011, 01:24
Alguien sabe como puedo hacer 2 fk a la misma tabla??

Ayuda

Espero su respuesta
Por EJ.

tbl1                              tbl2
-------                   -------------
Id  < -----------|            Id
Empresa            |--> EmpresaM  fk
                       |--> EmpresaP   fk

y que ambas llaves tengan la regla de eliminacion -> Establecer en null
y la regla de actualizacion en cascada - > Cascada

se puede?
Si te refieres a que si una tabla puede tener una relación doble con otra... sí, es posible.
En tu caso si EmpresaM es pongamos la empresa donde trabaja tu madre y EmpresaP, donde trabaja tu padre. Es posible relacionarlas con la tabla Empresa sin mayor problemas. Te doy el Script:

create table tbl1
(id int primary key,
empresa varchar(30))

create table tbl2

(id int primary key,
empresaM int,
empresaP int,
constraint fk5 foreign key (empresaM) references tbl1 (id),
constraint fk6 foreign key (empresaP) references tbl1 (id))

Lo que intenta (segun entiendo) es que empresaP dependa de empresaM, esto segun la normalizacion es incorrecto, se llama Dependencia funcional y trae muchos errores de actualizacion sobre todo en los casos donde se accesa a datos desde diferentes medios

Todos los elementos de cada entidad deben de depender unicamente de la llave primaria. no estoy seguro si eso sea posible desde sql server, o incluso usando un trigger pudieras lograrlo tal vez, no tengo ahora como probarlo

Saludos
 
Título: Re:2 FK a la misma tabla? se puede
Publicado por: aaiello en Jueves 15 de Septiembre de 2011, 16:04
Puede pasar, no es comun pero se puede. Un ejemplo muy habitual es tener alguna tabla de algun objeto y que tenga en sus atributos "creador y ultimo que modifico" y ambos hacen referencia a la tabla usuario.

-
Lic. Andrés M. Aiello
DBA MSSQL - Oracle
http://aiellodba.blogspot.com/
@AndresAiello
Título: Re:2 FK a la misma tabla? se puede
Publicado por: .net en Jueves 15 de Septiembre de 2011, 16:52
Si se puede tener 2 fk a una misma tabla, lo que marca error son las reglas de eliminaciony de actualizacion
ya hise la prueba
Título: Re:2 FK a la misma tabla? se puede
Publicado por: aaiello en Jueves 22 de Septiembre de 2011, 16:00
Fijate, igualmente no es una buena practica el cascade, mas allá de que es comodo.