relaciones en sql server 2005 express edition

03/10/2007 - 10:56 por mecodi | Informe spam
Necesito saber si si estaría bien el siguiente diagrama de base de datos:
Tengo las tablas:
Empleados(IdEmpleado(clave pirncipal),nombre,apellidos,...)
Equipos(IdEquipo(clave primaria),IdEmpleado,nombre,)
Vehiculos(IdVehiculo(clave primaria),IdEmpleado,matricula,)
Un empleado puede tener 0 ó varios equipos=> Empleados.IdEmpleado
(1>varios)Equipos.IdEmpleado.
Un empleado puede tener 0 ó 1 vehículo=> no se como ponerlo, o si en vez de
Tener el IdEmpleado en la tabla vehículos a lo mejor tengo que tener
IdVehiculo en la de empleados.
Si alguien me puede ayudar se lo agradecería, gracias.
Es para una aplicación en ASP.NET(C#).

Preguntas similare

Leer las respuestas

#1 Juan Diego Bueno
03/10/2007 - 13:56 | Informe spam
Hola

"mecodi" escribió en el mensaje
news:
Mostrar la cita
Es una relación M:M por lo que veo. Crea una tabla llamada
Equipos_Empleados, cuya clave principal sea IdEquipo,IdEmpleado (siendo
claves foráneas de sus respectivas tablas también)

Mostrar la cita
Suponiendo que cada vehículo tiene que estar como mínimo asociado a
cualquier empleado y como máximo también (1,1) (relación obligatoria
opcional 1:1), con poner el id de empleado en la tablas de vehículos como
clave foránea te bastaría.

Saludos
#2 mecodi
03/10/2007 - 17:00 | Informe spam
gracias Juan Diego, pero es que puede haber empleados que no tengan ningún
vehículo asignado (por ej. personal de oficina) y puede haber algún vehículo
sin asignar pero si sus datos guardados en la base de datos. Entonces que
sería, con el IdEmpleado en la tabla vehículos (que pueda tener valores null)
y la relación entre Personal.IdEmpleado(1) y Vehiculos.IdEmpleado(0 ó 1) como
sería, no se hacerlo en el Sql Express edition.
un saludo.
Merce
#3 Juan Diego Bueno
03/10/2007 - 17:47 | Informe spam
Entonces es una relación 1:1 opcional-opcional.

Se resuelve creando una tabla relación (por ejemplo, llamada
EMPLEADOS_VEHICULOS) y poniendo cualquiera de las dos claves principales de
las tablas que relacionas como primaria (Idempleado o Idvehiculo).

Algo así:

EMPLEADOS_VEHICULOS
IdEmpleado: Clave principal, relacionada mediante clave foránea con la
IdEmpleado de la tabla empleados
IdVehiculo: Clave foránea de la tabla Vehículos

De esta forma, si un empleado tiene vehículo, se almacena en esta tabla. Si
no, queda tal cual está en su tabla, de la misma forma que si un vehículo no
tiene empleado asociado, se deja tal cual está.

Te recomiendo que leas un buen manual o libro de diseño de bases de datos.
La forma de resolver esto en SQL Express es igual que en cualquier sistema
de base de datos relacional.

Lo que si que no te recomiendo es crear claves foráneas que puedan tener
valores null. A mi personalmente me parece una chapuza y además pierdes las
ventajas de la integridad referencial.

Saludos

"mecodi" escribió en el mensaje
news:
Mostrar la cita
#4 Carlos M. Calvelo
03/10/2007 - 22:04 | Informe spam
On 3 okt, 13:56, "Juan Diego Bueno"
wrote:
Mostrar la cita
Merce,
Si además quieres que un determinado equipo no se
pueda asignar a mas de un empleado puedes también poner
un constraint unique (y not null) a la columna idEquipo.

Saludos,
Carlos
#5 Carlos M. Calvelo
03/10/2007 - 22:06 | Informe spam
On 3 okt, 17:47, "Juan Diego Bueno"
wrote:
Mostrar la cita
Merce,
Aquí también puedes añadir un constraint unique (y not null) a la
columna idVehiculo para evita que el mismo vehículo se
asigne a mas de un empleado

Saludos,
Carlos
Ads by Google
Search Busqueda sugerida