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

Problemas a la hora de relacionar dos tablas

Estas en el tema de Problemas a la hora de relacionar dos tablas en el foro de SQL Server en Foros del Web. Hola Amigos, A ver si me podéis ayudar, tengo problemas a la hora de hacer la relación entre dos tablas. Os dejo el código algo ...
  #1 (permalink)  
Antiguo 05/05/2009, 01:58
Avatar de Montu  
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 4 meses
Puntos: 0
Exclamación Problemas a la hora de relacionar dos tablas

Hola Amigos,

A ver si me podéis ayudar, tengo problemas a la hora de hacer la relación entre dos tablas.
Os dejo el código algo simplificado, solo dos tablas y la relación que quiero hacer:

BBDD:

--DROP DATABASE Tanaki

CREATE DATABASE Tanaki
GO
USE Tanaki
GO

--Tablas + Datos

CREATE TABLE auricular
(
id int,
auricular1 nvarchar(50),
observaciones nvarchar(50),
PRIMARY KEY (id),
)
--CREATE INDEX [auricular_auricular1] ON auricular (auricular1);

CREATE TABLE recaudaciones (
id int,
hospital int,
habitaciones nvarchar(1000),
sistemapago int,
placa int,
cerradura int,
canalgratuito int,
auricular1 nvarchar(50),
telefono int,
soportetelf int,
mando int,
soportem int,
rizo int,
ctf int,
cps int,
tv int,
soportetv int,
observaciones nvarchar(1000),
PRIMARY KEY (id, ),
)

-- Relaciones
ALTER TABLE recaudaciones ADD CONSTRAINT rel_recau_auri
FOREIGN KEY (auricular1) REFERENCES auricular (auricular1)
ON DELETE CASCADE ON UPDATE CASCADE

A la hora de crear la tablas todo esta OK,
pero me interesa que en la tabla recaudaciones auricular1 sea de tipo nvarchar y no int, entonces cuando hago la relaciones, es cuando me peta:
There are no primary or candidate keys in the referenced table 'auricular' that match the referencing column list in the foreign key 'rel_recau_auri'.

Me interesa que sea de tipo nvarcharm porque esta bbdd la tengo conectada con una aplicación que he hecho, y me interesa pasarle el nombre del auricular, en lugar del ID del auricular.

Con int en auricular en recaudaciones todo funciona, pero como te he dicho me inteersa pasarle un texto (nvarchar)

Alguien me puede decir que falla? Muchas gracias amigos!
  #2 (permalink)  
Antiguo 05/05/2009, 03:50
Avatar de Montu  
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Problemas a la hora de relacionar dos tablas

Nadie sabe nada?
  #3 (permalink)  
Antiguo 05/05/2009, 09:18
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Problemas a la hora de relacionar dos tablas

No lo hagas mediante un constraint de FOREING KEY, ya que te esta forzando a que sea PRIMARY KEY tu columna de referencia, hazlo mediante TRIGGER, para cuidar la referencia de consistencia en registros.
  #4 (permalink)  
Antiguo 05/05/2009, 09:39
Avatar de Montu  
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Problemas a la hora de relacionar dos tablas

Hola iislas,

A que te refieres mediante TRIGGER?

Muchas gracias.
  #5 (permalink)  
Antiguo 05/05/2009, 11:37
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Respuesta: Problemas a la hora de relacionar dos tablas

un trigger es un tipo especial de stored procedure...que se dispara cuando ocurren ciertos eventos, se puede utilizar para asegurar la consistencia de la info, como nos comenta iislas...puedes encontrar todo el detalle en la ayuda de sql server...

Tu problema es que la llave principal es el campo ID y tu quieres hacer la referencia entre los campos auricular1...

Para poder hacer referencia con una llave foreanea, se requiere que la columna referenciada sea una llave primaria o que contenga un constrain/index unico...

Se requiere que la columna tenga valores unicos para poder hacer la validacion...

por ejemplo, para crea el indice podria ser algo como esto, justo antes de hacer el foreign key...:

Código:
CREATE UNIQUE INDEX IX_AURICULAR_FG ON auricular(auricular1)
GO
-- Relaciones
ALTER TABLE recaudaciones 
ADD CONSTRAINT rel_recau_auri FOREIGN KEY (auricular1) REFERENCES auricular (auricular1)
ON DELETE CASCADE ON UPDATE CASCADE
asi se veria en el enterprise manager de SQL 2000...


Espero te sea de utilidad...
saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #6 (permalink)  
Antiguo 06/05/2009, 01:33
Avatar de Montu  
Fecha de Ingreso: enero-2009
Mensajes: 23
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Problemas a la hora de relacionar dos tablas

Hola Andres95

Muchas gracias por todo, en serio! Me has sido de gran ayuda,
como me comentabas me faltaba crear el Index:

CREATE UNIQUE INDEX IX_AURICULAR_FG ON auricular(auricular1)
GO

Tu explicación y esquema me han ayudado mucho!
De nuevo Gracias!
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 00:29.