Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/11/2014, 14:30
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: relaciones en mi base de datos

¿Esto?:
Código MySQL:
Ver original
  1. CREATE TABLE `empleados` (
  2.                   `id_empleados` int(11) NOT NULL AUTO_INCREMENT,
  3.                   `id_usuarios` int(11) NOT NULL,
  4.                   `cedula` int(11) NOT NULL,
  5.                   `codigoemp` int(11) NOT NULL,
  6.                   `nombres` text NOT NULL,
  7.                   `apelidos` text NOT NULL,
  8.                   `direccion` text NOT NULL,
  9.                   `telefonos` int(11) NOT NULL,
  10.                   `fechanac` date NOT NULL,
  11.                   `condicion` text NOT NULL,
  12.                   `fechaingr` date NOT NULL,
  13.                   `fechavenc` date NOT NULL,
  14.                   `cargo` text NOT NULL,
  15.                   `departamento` text NOT NULL,
  16.                   `salario` int(11) NOT NULL,
  17.                   `numeronomina` int(11) NOT NULL,
  18.                   PRIMARY KEY (`id_empleados`)
  19.                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  20.  
  21.  CREATE TABLE `usuarios` (
  22.                   `id_usuarios` int(11) NOT NULL AUTO_INCREMENT,
  23.                   `id_empleados` int(11) NOT NULL,
  24.                   `clave` varchar(60) NOT NULL,
  25.                   `tipo` text NOT NULL,
  26.                   PRIMARY KEY (`id_usuarios`)
  27.                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Por lo que se alcanza a ver, estás pretendiendo hacer una FK en Usuarios que apunte a Empleados y otra en empleados que apunte a usuarios... si eso es lo que quieres hacer, te comento que eso se denominan "relaciones circulares", y son de cumplimiento imposible.
Las relaciones circulares son errores de diseño que no se deben cometer.

Te lo explico en palabras simples: En el supuesto caso que pudieras definirlas, para dar de alta un empleado debería existir primero el usuario correspondiente al empleado; pero para dar de alta el usuario antes debe existir el empleado a que hace referencia....
Como te imaginas, eso es simplemente imposible.

¿Se entiende?

El error consiste en creer que todo se relaciona con todo, y no es asi. dependerá del analisis, evitar que se generen relaciones de este tipo.

Resumiendo: ¿Qué es primero? ¿El Empleado o el Usuario?
A mi entender un Empleado va primero, ya que pes el empleado en tanto persona quien pertenece a la organización de la empresa. El Usuario es un atributo del Empleado que ser usa para acceder al sistema, pero para que el username exista, el Empleado ya debe existir.
Por su lado el Usuario depende del empleado, por lo que si el empleado desaparece, el usuario debe dejar de existir.

Entonces lo que va e una FK en Usuario que apunta a empleado, pero ninguna de Empelado apunta a Usuario.

¿Queda más claro?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)