Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/07/2007, 01:36
sinma
 
Fecha de Ingreso: mayo-2007
Mensajes: 41
Antigüedad: 17 años
Puntos: 0
Pregunta Duda sobre estructura de datos

Hola a tod@s,

Tengo una duda sobre cómo estructurar los datos en mi aplicación, propongo las dos soluciones que veo, a ver cuál es la más recomendable.

Tengo una tabla de usuarios, cuya clave primaria está comuesta por los tres campos siguientes:

id => Código del empleado dentro de su oficina
id_empresa => código de la empresa
id_oficina => código de la oficina
Código:
CREATE TABLE `usuarios` ( 
`id` INT NOT NULL ,
`id_empresa` INT NOT NULL ,
`id_oficina` INT NOT NULL ,
`nombre` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `id` , `id_empresa` , `id_oficina` ) 
);
Por otro lado hay otras tablas que debo relacionar con la tabla de usuarios. Y, lógicamente, las debo relacionar por la clave primaria. Por lo que si tengo, por ejemplo, una tabla de peticiones que realizan los usuarios, tendría los siguientes campos:
Código:
CREATE TABLE `peticiones_usuarios` ( 
`id_peticion` INT NOT NULL AUTO_INCREMENT ,
`desc_peticion` VARCHAR( 255 ) NOT NULL ,
`id_usuario` INT NOT NULL ,
`id_empresa` INT NOT NULL ,
`id_oficina` INT NOT NULL ,
PRIMARY KEY ( `id_peticion` ) 
);
Pero no acabo de tener del todo claro que esta sea la mejor solución, por el hecho que es un poco engorroso una relacion con tantos campos.

La otra alternativa que me planteo es añadir un campo autoincremental en la tabla de usuarios y que sea éste la clave primaria, y que los campos id, id_empresa, id_delegacion sean valor único. Y relacionar esta tabla con las otras a través de dicho campo autoincremental:
Código:
CREATE TABLE `usuarios` ( 
`codigo` INT NOT NULL AUTO_INCREMENT ,
`id` INT NOT NULL ,
`id_empresa` INT NOT NULL ,
`id_oficina` INT NOT NULL ,
`nombre` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `codigo` ) ,
UNIQUE ( 
 `id` ,
 `id_empresa` ,
 `id_oficina` 
)
);
Código:
 CREATE TABLE `peticiones_usuarios` ( 
`id_peticion` INT NOT NULL AUTO_INCREMENT ,
`desc_peticion` VARCHAR( 255 ) NOT NULL ,
`codigo_usuario` INT NOT NULL ,
PRIMARY KEY ( `id_peticion` ) 
);
De esta forma, se relacionan mediante el campo usuarios.codigo y peticiones_usuarios.codigo_usuario.


Espero haber expuesto mi duda de dorma clara y que me podais ayudar.

Muchas gracias.