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:
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.


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)

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.



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
Respuesta Responder a este mensaje
#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
Respuesta Responder a este mensaje
#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:

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

Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
03/10/2007 - 22:04 | Informe spam
On 3 okt, 13:56, "Juan Diego Bueno"
wrote:
Hola

"mecodi" escribió en el mensajenews: 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.

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)




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
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
03/10/2007 - 22:06 | Informe spam
On 3 okt, 17:47, "Juan Diego Bueno"
wrote:
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




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
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida