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

Problemas con llaves!

Estas en el tema de Problemas con llaves! en el foro de SQL Server en Foros del Web. Tengo un problema al relacionar una llave foranea que esta asu vez esta como llave compuesta Tengo la tabla Presup la cual tiene como llave ...
  #1 (permalink)  
Antiguo 21/09/2010, 15:36
 
Fecha de Ingreso: noviembre-2007
Mensajes: 81
Antigüedad: 16 años, 4 meses
Puntos: 0
Problemas con llaves!

Tengo un problema al relacionar una llave foranea que esta asu vez esta como llave compuesta
Tengo la tabla Presup
la cual tiene como llave Primaria compuesta a:
Id_Año INT,
Poa_id INT NOT NULL,

Despues tengo otra tabla "Mespre" la cuan hace referencia a la tabla "Presup" y al campo "Id_Año INT "
pero hara hora de ejecutar la consulta me manda un error que es el siguiente:

Mens. 1776, Nivel 16, Estado 0, Línea 1
No hay claves principales ni candidatas en la tabla a la que se hace referencia ('Presup') que concuerden con la lista de columnas que hace la referencia en la clave externa 'fk_Mes_Año'.
Mens. 1750, Nivel 16, Estado 0, Línea 1
No se pudo crear la restricción. Consulte los errores anteriores.



Dejo mi script de las tablas:

CREATE TABLE dbo.Presup(
Id_Año INT,
Poa_id INT NOT NULL,
Cansup FLOAT NOT NULL,
CONSTRAINT pk_Presup_Año_Poa_id PRIMARY KEY(Id_Año,Poa_id),
CONSTRAINT fk_Presup_Poa FOREIGN KEY(Poa_id)REFERENCES Poa(Id_poa)
);
--
CREATE TABLE dbo.Mespre(
Id_Mes INT IDENTITY(1,1),
Nommes VARCHAR(10) NOT NULL,
Canpre FLOAT NOT NULL,
Años_Id INT NOT NULL,
CONSTRAINT pk_Mes_Id PRIMARY KEY(Id_Mes),
CONSTRAINT fk_Mes_Año FOREIGN KEY(Años_Id)REFERENCES Presup(Id_Año)
);
  #2 (permalink)  
Antiguo 21/09/2010, 16:54
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con llaves!

Tengo la ligera sospecha que la relacion deberia quedar de MESPRE hacia PRESUP, entiendo que no debe ingresar ningun registro en PRESUP, si no existe su correspondiente FK en MESPRE, ¿no?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 21/09/2010, 18:17
 
Fecha de Ingreso: noviembre-2007
Mensajes: 81
Antigüedad: 16 años, 4 meses
Puntos: 0
Mensaje Respuesta: Problemas con llaves!

Cambie la estructura de la tabla por que me falto un Fk pero a un asi me marcar el error.

Mi llave Compuesta esta bien?



Umm se supone que la tabla "Presup"[Presupuesto] tiene una llave que es el año y esta compuesta por una llave llamada "Poa_id" y a su vez tiene una cantidad X
Ejemplo

*Id_Año * Poa_id Cansup
2009 001 12000
2009 002 12000

*Llaves para formar la compuesta por puede aver varios 2009

La siguiente tabla "Mespre" corresponde meses en que se puede dividir todo el [Presup]presupuesto del año 2009 y del Poa_id 001.

La tabla "Mespre" esta formada por una llave autonumerica "Id_Mes" seguido del nombre del Mes "Nommes" y de una Canditad "Canpre" y sus llaves foraneas como Años_Id y Id_Poa las cuales corresponden de la tabla Presup

Ejemplo:

*Id_mes -- Nommes -- Campre --- **Años_Id -- **Id_Poa
1 Enero 1000 2009 001
2 Enero 1000 2009 002

*Llave primaria
**LLave foranea


Un presupuesto de un Año [2009] y que corresponde a un Poa(001) y un cantidad.

Se divide en 12 meses que tiene el año asignando una cantidad a cada mes que seria de 1000

Estructura de mis Tablas
CREATE TABLE dbo.Presup(
Id_Año INT,
Poa_id INT NOT NULL,
Cansup FLOAT NOT NULL,
CONSTRAINT pk_Presup_Año_Poa_id PRIMARY KEY(Id_Año,Poa_id),
CONSTRAINT fk_Presup_Poa FOREIGN KEY(Poa_id)REFERENCES Poa(Id_poa)
);
--
CREATE TABLE dbo.Mespre(
Id_Mes INT IDENTITY(1,1),
Nommes VARCHAR(10) NOT NULL,
Canpre FLOAT NOT NULL,
Años_Id INT NOT NULL,
Id_Poa INT NOT NULL,
CONSTRAINT pk_Mes_Id PRIMARY KEY(Id_Mes),
CONSTRAINT fk_Presup_Mes FOREIGN KEY(Años_Id)REFERENCES Presup(Id_Año),
CONSTRAINT fk_Presup_Poa FOREIGN KEY(Id_Poa)REFERENCES Presup(Poa_id)
);

Haber si me explique bien !! ayuda.

Etiquetas: llaves
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 22:27.