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

Duda sobre estructura de datos

Estas en el tema de Duda sobre estructura de datos en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 27/07/2007, 01:36
 
Fecha de Ingreso: mayo-2007
Mensajes: 41
Antigüedad: 16 años, 11 meses
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.
  #2 (permalink)  
Antiguo 27/07/2007, 10:15
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Re: Duda sobre estructura de datos

Bueno primero tu consulta va en Base de Datos.
Lee un poco acerca de las Formas Normales (en wikipedia hay bastante info) para que veas como estructurar bien tu bd.

Creo que lo mejor es que tendrias que crear relaciones que cumplan con la condicion FN2 o FN3.

Saludos
  #3 (permalink)  
Antiguo 22/08/2007, 04:39
 
Fecha de Ingreso: mayo-2007
Mensajes: 41
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Duda sobre estructura de datos

Cita:
Iniciado por DeeR Ver Mensaje
Lee un poco acerca de las Formas Normales (en wikipedia hay bastante info) para que veas como estructurar bien tu bd.

Creo que lo mejor es que tendrias que crear relaciones que cumplan con la condicion FN2 o FN3.

Tras mirar el tema de las Formas Normales, no tengo del todo claro cómo aplicarlo en la duda que comenté.

¿Cuál de las dos soluciones que planteé sería la correcta?

Gracias.
  #4 (permalink)  
Antiguo 22/08/2007, 06:02
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 20 años, 10 meses
Puntos: 3
Re: Duda sobre estructura de datos

Hola, yo no tengo claro que te sea útil tener los tres campos esos como clave primaria en la tabla usuarios. Empresa y oficina son dos entidades que podrías separar en otras dos tablas, con sus respectivas claves primarias (id_empresa para la tabla empresa, y id_oficina para la tabla oficina). Luego en la tabla usuarios el id_oficina y el id_empresa ya no tendrían por qué ser claves primarias, te bastaría con p.ej: id_usuario, y luego id_oficina y id_empresa te interrelacionarían respectivamente con la tabla oficina y empresa que dispondrían de la misma clave como clave primaria.

En el caso de peticiones_usuarios, tendrías como clave primaria id_peticion, y como referencia a qué usuario hizo la petición, id_usuario.

Bueno, espero haber entendido bien lo que querías y que esto te sirva.

Última edición por BrujoNic; 24/08/2007 a las 13:02
  #5 (permalink)  
Antiguo 22/08/2007, 07:00
 
Fecha de Ingreso: mayo-2007
Mensajes: 41
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Duda sobre estructura de datos

Muchas gracias por tu respuesta.

El problema que tengo consiste en que el identificador de usuario no es valor único, porque dos usuarios de diferentes empresas pueden tener un mismo identificador. Por ejemplo, puede darse el siguiente caso:

id: 000001
id_empresa: 1
id_oficina: 1

id: 000001
id_empresa: 1
id_oficina: 2

id: 000001
id_empresa: 2
id_oficina: 1

Supongo que la mejor solución será relacionar el resto de tablas con la tabla de usuarios mediante estos tres campos, que juntos componen la clave primaria...
  #6 (permalink)  
Antiguo 22/08/2007, 07:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Duda sobre estructura de datos

Tema trasladado a Bases de Datos.

Porfavor publica en los foros correctos.
  #7 (permalink)  
Antiguo 24/08/2007, 00:24
 
Fecha de Ingreso: junio-2007
Ubicación: Barcelona
Mensajes: 20
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: Duda sobre estructura de datos

Mejor la segunda opción que indicaste: 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_oficina sean valor único.

Un saludo.
  #8 (permalink)  
Antiguo 27/08/2007, 06:45
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 20 años, 10 meses
Puntos: 3
Re: Duda sobre estructura de datos

Si dos usuarios de diferentes oficinas o empresas tienen el mismo id de usuario para sus respectivos lugares de trabajo o intranets/redes locales o lo que sea, ese dato entonces olvídalo como clave primaria. Como van a usar la misma base de datos de forma conjunta, en el mismo sistema, puedes crear un valor único para cada uno de ellos, sean de donde sean. Ese valor es el que te tiene que servir como clave primaria.

La segunda opción parece la más idónea, porque te creas una especie de identificador único y exclusivo de cada usuario, esté donde esté, llamado codigo, y en la tabla de peticiones, cada petición tendrá un código de usuario conteniendo ese identificador exclusivo. Podrás relacionar un usuario con 0, una o más peticiones.
  #9 (permalink)  
Antiguo 27/08/2007, 06:49
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 20 años, 10 meses
Puntos: 3
Re: Duda sobre estructura de datos

Cita:
Iniciado por argen Ver Mensaje
Mejor la segunda opción que indicaste: 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_oficina sean valor único.

Un saludo.
Si en la tabla usuarios especificas que id_empresa y id_oficina sean valores únicos, no se podrá almacenar más de un usuario que trabaje en la misma empresa/oficina en esa tabla. No deben ser valores únicos en la tabla usuarios.
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 02:37.