Autor Tema: Duda con base de datos entidad relación y foreign keys  (Leído 4948 veces)

JcRi$ti4n

  • Sin experiencia
  • *
  • Mensajes: 9
    • Ver Perfil
Saludos comunidad, hoy vengo con una pequeña duda que espero me colaboren estoy realizando una base de datos relacional, el problema surge en que tengo 4 tablas que son :
Código: [Seleccionar]
create table funcionariocargo(
    funcionariocargo_id int not null,
    funcionario_id int not null,
    cargo_id int not null,
    numero_item int(2) not null,
    obsevaciones varchar(70),
    perfil_id int not null,
    primary key(funcionariocargo_id),
    foreign key(funcionario_id)references funcionario(funcionario_id),
    foreign key(cargo_id)references cargo(cargo_id)
    foreign key(perfil_id)references perfil(perfil_id)
    );
-------
create table perfil(
    perfil_id int not null,
    funcionariocargo_id int not null,
    nombre_perfil varchar(35) not null,
    descripcion varchar(50),
    primary key(perfil_id),
   
       
    );
----------
create table rol(
    rol_id int not null,
    perfil_id int not null,
    nombre_rol varchar(35) not null,
    descripcion varchar(35),
    primary key(rol_id),
 
    );
-----
CREATE detalleperfilrol (
  `perfil_id` int(11) NOT NULL,
  `rol_id` int(11) NOT NULL,
  KEY `rol_id` (`rol_id`),
  KEY `perfil_id` (`perfil_id`)
) ;
la cuestion es que como pueden observar un funcionariocargo tiene un perfil y este perfil contiene mucho roles y viceseversa, como no puede repetir el PK de perfil para que se asocie con la tabla rol, como por ejem. el perfil base puede contener al rol x,y,z , y el perfil base1 puede contener al rol x,y.
Entonces cree otra tabla detalleperfilrol  que contiene los Pk de ambos, quiero obtener criticas sobre este planteamiento, gracias de antemano
« Última modificación: 14 de Septiembre 2014, 13:02 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Duda con base de datos E-R
« Respuesta #1 en: 11 de Junio 2014, 19:21 »
Hola, hay cosas que no veo claras, pero tendrías que explicar qué significado tiene cada cosa para poder entenderlo.

Por ejemplo en la tabla funcionariocargo relacionas un funcionario con un cargo y con un perfil.

Pero luego en la tabla perfil vuelves a tener el perfil_id relacionado con funcionariocargo_id

¿Si ya lo tienes relacionado en la tabla funcionariocargo para qué vuelves a incluir aquí una relación? Aparentemente estás creando una duplicidad innecesaria  ::)

JcRi$ti4n

  • Sin experiencia
  • *
  • Mensajes: 9
    • Ver Perfil
Re:Duda con base de datos E-R
« Respuesta #2 en: 11 de Junio 2014, 23:28 »
Bueno gracias por la respuesta y disculpas, lo que pasa es que no fije la fecha que actualize el archivo para copiar el codigo de ejemplo, asi que aqui va el correcto
Código: [Seleccionar]
create table funcionariocargo(
    funcionariocargo_id int not null,
    funcionario_id int not null,
    cargo_id int not null,
    numero_item int(2) not null,
    obsevaciones varchar(70),
    perfil_id int not null,
    primary key(funcionariocargo_id),
    foreign key(funcionario_id)references funcionario(funcionario_id),
    foreign key(cargo_id)references cargo(cargo_id)
    foreign key(perfil_id)references perfil(perfil_id)
    );
-------
create table perfil(
    perfil_id int not null,
     nombre_perfil varchar(35) not null,
    descripcion varchar(50),
    primary key(perfil_id),
   
       
    );
----------
create table rol(
    rol_id int not null,
    nombre_rol varchar(35) not null,
    descripcion varchar(35),
    primary key(rol_id),
 
    );
-----
CREATE detalleperfilrol (
  perfil_id  int  NOT NULL,
  rol_id int NOT NULL,
  key rol_id (rol_id),
  key perfil_id (perfil_id)
) ;

al tener la tabla funcionariocargo esta relacionado con un funcionario y un cargo que son tablas aparte y que no influyen mucho en la cuestion , las tablas perfil ,rol, detalleperfilrol son las que quiero consultar si se encuentran bien relacionadas con respecto a funcionariocargo espero aora si me deje entender
saludos

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Duda con base de datos E-R
« Respuesta #3 en: 12 de Junio 2014, 11:57 »
Ahora el diseño sí parece correcto. Según este diseño, un funcionariocargo tiene un perfil, y un perfil puede tener uno o muchos roles. Es la forma de hacerlo.

Lo único que me parece te faltaría es declarar foreign las claves de detalleperfilrol, es decir,

CREATE detalleperfilrol (
  perfil_id  int  NOT NULL,
  rol_id int NOT NULL,
  foreign key rol_id (rol_id),
  foreign key perfil_id (perfil_id)
) ;

En esta última tabla la primary key es una clave compuesta, formada por las claves rol_id y perfil_id

JcRi$ti4n

  • Sin experiencia
  • *
  • Mensajes: 9
    • Ver Perfil
Re:Duda con base de datos E-R
« Respuesta #4 en: 12 de Junio 2014, 23:08 »
bueno gracias por la opinion Mastermind ya logre poner en orden esta base datos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".