elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Ayuda amigo necesito crear una base de datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda amigo necesito crear una base de datos  (Leído 3,162 veces)
Alejandro1195

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Ayuda amigo necesito crear una base de datos
« en: 27 Junio 2015, 04:50 am »

en access y debo de crear una agenda telefonica tengo estas tablas pero a la hora de relacionarlas no se como hacer me ayuda..
BD debe de llevar, telefonos de alumnos, catedraticos, sedes de la universidad y personal administrativo


En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Ayuda amigo necesito crear una base de datos
« Respuesta #1 en: 27 Junio 2015, 18:31 pm »

En ves de hacer eso lo que yo haría es una sola tabla con usuarios y una tabla con tipos de usuarios e ir asociando los tipos de usuarios con los usuarios (grupos de usuarios) y luego la tabla de usuarios asignarle un id de sede, ahora, que pasa si un usuario está en mas de una sede? en ese caso necesitarás una tabla adicional relacional entre usuarios y sedes.

Mira, aca hice uno en MySQL pero te puede servir para hacerlo en access:

http://41.media.tumblr.com/feb031b55808afc1670a28f7a0b2eb14/tumblr_nqm3xhKGJZ1uzz9lco1_1280.png


Código
  1. -- MySQL Workbench Synchronization
  2. -- Generated: 2015-06-27 13:45
  3. -- Model: New Model
  4. -- Version: 1.0
  5. -- Project: Name of the project
  6. -- Author: WHK
  7.  
  8. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  9. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  10. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
  11.  
  12. CREATE TABLE IF NOT EXISTS `blank`.`sedes` (
  13.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  14.  `campus` VARCHAR(512) NOT NULL,
  15.  `direccion` VARCHAR(512) NOT NULL,
  16.  PRIMARY KEY (`id`))
  17. ENGINE = InnoDB
  18. DEFAULT CHARACTER SET = utf8
  19. COLLATE = utf8_general_ci;
  20.  
  21. CREATE TABLE IF NOT EXISTS `blank`.`sedes_telefonos` (
  22.  `sede_id` INT(11) NOT NULL,
  23.  `codigo_pais` INT(11) NOT NULL,
  24.  `codigo_ciudad` INT(11) NOT NULL,
  25.  `numero` INT(11) NOT NULL,
  26.  `es_fijo` TINYINT(1) NOT NULL DEFAULT 0,
  27.  PRIMARY KEY (`sede_id`),
  28.  CONSTRAINT `fk_sedes_telefonos_sede`
  29.    FOREIGN KEY (`sede_id`)
  30.    REFERENCES `blank`.`sedes` (`id`)
  31.    ON DELETE CASCADE
  32.    ON UPDATE CASCADE)
  33. ENGINE = InnoDB
  34. DEFAULT CHARACTER SET = utf8
  35. COLLATE = utf8_general_ci;
  36.  
  37. CREATE TABLE IF NOT EXISTS `blank`.`usuarios` (
  38.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  39.  `nombres` VARCHAR(45) NOT NULL,
  40.  `apellidos` VARCHAR(45) NOT NULL,
  41.  `direccion` VARCHAR(512) NOT NULL,
  42.  PRIMARY KEY (`id`))
  43. ENGINE = InnoDB
  44. DEFAULT CHARACTER SET = utf8
  45. COLLATE = utf8_general_ci;
  46.  
  47. CREATE TABLE IF NOT EXISTS `blank`.`usuarios_telefonos` (
  48.  `usuario_id` INT(11) NOT NULL AUTO_INCREMENT,
  49.  `codigo_pais` INT(11) NOT NULL,
  50.  `codigo_ciudad` INT(11) NOT NULL,
  51.  `numero` INT(11) NOT NULL,
  52.  `es_fijo` TINYINT(1) NOT NULL DEFAULT 0,
  53.  PRIMARY KEY (`usuario_id`),
  54.  CONSTRAINT `fk_usuarios_telefonos_usuarios1`
  55.    FOREIGN KEY (`usuario_id`)
  56.    REFERENCES `blank`.`usuarios` (`id`)
  57.    ON DELETE CASCADE
  58.    ON UPDATE CASCADE)
  59. ENGINE = InnoDB
  60. DEFAULT CHARACTER SET = utf8
  61. COLLATE = utf8_general_ci;
  62.  
  63. CREATE TABLE IF NOT EXISTS `blank`.`correos` (
  64.  `usuario_id` INT(11) NOT NULL,
  65.  `correo` VARCHAR(65) NOT NULL,
  66.  PRIMARY KEY (`usuario_id`),
  67.  CONSTRAINT `fk_usuarios_correos_usuarios1`
  68.    FOREIGN KEY (`usuario_id`)
  69.    REFERENCES `blank`.`usuarios` (`id`)
  70.    ON DELETE CASCADE
  71.    ON UPDATE CASCADE)
  72. ENGINE = InnoDB
  73. DEFAULT CHARACTER SET = utf8
  74. COLLATE = utf8_general_ci;
  75.  
  76. CREATE TABLE IF NOT EXISTS `blank`.`usuarios_sedes_relacion` (
  77.  `usuario_id` INT(11) NOT NULL,
  78.  `sede_id` INT(11) NOT NULL,
  79.  PRIMARY KEY (`usuario_id`, `sede_id`),
  80.  INDEX `fk_usuarios_sedes_relacion_sede1_idx` (`sede_id` ASC),
  81.  CONSTRAINT `fk_usuarios_sedes_relacion_usuarios1`
  82.    FOREIGN KEY (`usuario_id`)
  83.    REFERENCES `blank`.`usuarios` (`id`)
  84.    ON DELETE CASCADE
  85.    ON UPDATE CASCADE,
  86.  CONSTRAINT `fk_usuarios_sedes_relacion_sede1`
  87.    FOREIGN KEY (`sede_id`)
  88.    REFERENCES `blank`.`sedes` (`id`)
  89.    ON DELETE CASCADE
  90.    ON UPDATE CASCADE)
  91. ENGINE = InnoDB
  92. DEFAULT CHARACTER SET = utf8
  93. COLLATE = utf8_general_ci;
  94.  
  95. CREATE TABLE IF NOT EXISTS `blank`.`usuarios_roles` (
  96.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  97.  `nombres` VARCHAR(45) NOT NULL,
  98.  PRIMARY KEY (`id`))
  99. ENGINE = InnoDB
  100. DEFAULT CHARACTER SET = utf8
  101. COLLATE = utf8_general_ci;
  102.  
  103. CREATE TABLE IF NOT EXISTS `blank`.`usuarios_roles_relacion` (
  104.  `usuario_id` INT(11) NOT NULL,
  105.  `usuarios_rol_id` INT(11) NOT NULL,
  106.  PRIMARY KEY (`usuario_id`, `usuarios_rol_id`),
  107.  INDEX `fk_usuarios_roles_relacion_usuarios_roles1_idx` (`usuarios_rol_id` ASC),
  108.  CONSTRAINT `fk_usuarios_roles_relacion_usuarios1`
  109.    FOREIGN KEY (`usuario_id`)
  110.    REFERENCES `blank`.`usuarios` (`id`)
  111.    ON DELETE CASCADE
  112.    ON UPDATE CASCADE,
  113.  CONSTRAINT `fk_usuarios_roles_relacion_usuarios_roles1`
  114.    FOREIGN KEY (`usuarios_rol_id`)
  115.    REFERENCES `blank`.`usuarios_roles` (`id`)
  116.    ON DELETE CASCADE
  117.    ON UPDATE CASCADE)
  118. ENGINE = InnoDB
  119. DEFAULT CHARACTER SET = utf8
  120. COLLATE = utf8_general_ci;
  121.  
  122. CREATE TABLE IF NOT EXISTS `blank`.`alumnos_datos` (
  123.  `usuario_id` INT(11) NOT NULL,
  124.  `carrera_id` INT(11) NOT NULL,
  125.  PRIMARY KEY (`usuario_id`, `carrera_id`),
  126.  INDEX `fk_alumnos_datos_carreras1_idx` (`carrera_id` ASC),
  127.  CONSTRAINT `fk_alumnos_datos_usuarios1`
  128.    FOREIGN KEY (`usuario_id`)
  129.    REFERENCES `blank`.`usuarios` (`id`)
  130.    ON DELETE CASCADE
  131.    ON UPDATE CASCADE,
  132.  CONSTRAINT `fk_alumnos_datos_carreras1`
  133.    FOREIGN KEY (`carrera_id`)
  134.    REFERENCES `blank`.`carreras` (`id`)
  135.    ON DELETE CASCADE
  136.    ON UPDATE CASCADE)
  137. ENGINE = InnoDB
  138. DEFAULT CHARACTER SET = utf8
  139. COLLATE = utf8_general_ci;
  140.  
  141. CREATE TABLE IF NOT EXISTS `blank`.`carreras` (
  142.  `id` INT(11) NOT NULL,
  143.  `nombre` VARCHAR(45) NOT NULL,
  144.  PRIMARY KEY (`id`))
  145. ENGINE = InnoDB
  146. DEFAULT CHARACTER SET = utf8
  147. COLLATE = utf8_general_ci;
  148.  
  149. CREATE TABLE IF NOT EXISTS `blank`.`administrativo_datos` (
  150.  `usuario_id` INT(11) NOT NULL,
  151.  `cargo_id` INT(11) NOT NULL,
  152.  PRIMARY KEY (`usuario_id`, `cargo_id`),
  153.  INDEX `fk_administrativo_datos_cargos1_idx` (`cargo_id` ASC),
  154.  CONSTRAINT `fk_administrativo_datos_cargos1`
  155.    FOREIGN KEY (`cargo_id`)
  156.    REFERENCES `blank`.`cargos` (`int`)
  157.    ON DELETE CASCADE
  158.    ON UPDATE CASCADE,
  159.  CONSTRAINT `fk_administrativo_datos_usuarios1`
  160.    FOREIGN KEY (`usuario_id`)
  161.    REFERENCES `blank`.`usuarios` (`id`)
  162.    ON DELETE CASCADE
  163.    ON UPDATE CASCADE)
  164. ENGINE = InnoDB
  165. DEFAULT CHARACTER SET = utf8
  166. COLLATE = utf8_general_ci;
  167.  
  168. CREATE TABLE IF NOT EXISTS `blank`.`cargos` (
  169.  `int` INT(11) NOT NULL AUTO_INCREMENT,
  170.  `nombre` VARCHAR(45) NOT NULL,
  171.  PRIMARY KEY (`int`))
  172. ENGINE = InnoDB
  173. DEFAULT CHARACTER SET = utf8
  174. COLLATE = utf8_general_ci;
  175.  
  176. CREATE TABLE IF NOT EXISTS `blank`.`catedraticos_datos` (
  177.  `usuario_id` INT(11) NOT NULL,
  178.  `asignatura_id` INT(11) NOT NULL,
  179.  PRIMARY KEY (`usuario_id`, `asignatura_id`),
  180.  INDEX `fk_catedraticos_asignaturas1_idx` (`asignatura_id` ASC),
  181.  CONSTRAINT `fk_catedraticos_asignaturas1`
  182.    FOREIGN KEY (`asignatura_id`)
  183.    REFERENCES `blank`.`asignaturas` (`id`)
  184.    ON DELETE CASCADE
  185.    ON UPDATE CASCADE,
  186.  CONSTRAINT `fk_catedraticos_usuarios1`
  187.    FOREIGN KEY (`usuario_id`)
  188.    REFERENCES `blank`.`usuarios` (`id`)
  189.    ON DELETE NO ACTION
  190.    ON UPDATE NO ACTION)
  191. ENGINE = InnoDB
  192. DEFAULT CHARACTER SET = utf8
  193. COLLATE = utf8_general_ci;
  194.  
  195. CREATE TABLE IF NOT EXISTS `blank`.`asignaturas` (
  196.  `id` INT(11) NOT NULL,
  197.  `nombre` VARCHAR(45) NOT NULL,
  198.  PRIMARY KEY (`id`))
  199. ENGINE = InnoDB
  200. DEFAULT CHARACTER SET = utf8
  201. COLLATE = utf8_general_ci;
  202.  
  203.  
  204. SET SQL_MODE=@OLD_SQL_MODE;
  205. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  206. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Mis argumentos:
Los usuarios se encuentran en una sola tabla, de esta manera la selección de personas por sede es mas rápido, cada usuario ya sea alumno o profesor estará asociado a una sede cosa que en tu db no estaba considerado, cada usuario puede tener mas de un correo y mas de un telefono, las busquedas se podrán realizar por codigo de pais de telefono en caso de que necesiten hacer algun tipo de envio masivo de sms o llamadas, la base de datos está completamente desnormalizada asi que si necesitas mas performance la normalizas, no necesitarás muchos joins para obtener todos los correos ya que todo está centralizado en una sola tabla, podrás hacer que tu sistema web administre carreras, cargos y asignaturas ya que en tu db solo ingresabas texto plano y si alguien inserta un espacio en blanco extra o un acento adicional ibas a tener duplicidad de datos y no hubieras podido hacer una búsqueda homogenea y no hubieras podido hacer modificaciones, por ejemplo digamos que la asignatura de lenguaje ya no se llamará lenguaje sino castellano, entonces lo cambias desde la columna y no necesitas cambiar todos los registros. No necesitarás una tabla de correos y telefonos para cada tipo de usuario.

Dudas?

Saludos.


« Última modificación: 27 Junio 2015, 18:49 pm por WHK » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda para crear una base de datos
Programación Visual Basic
karmany 3 2,336 Último mensaje 28 Diciembre 2005, 02:41 am
por karmany
Necesito Ayuda en TEXTFIELD Y BASE DE DATOS
Java
franciscojavah 2 6,932 Último mensaje 28 Agosto 2008, 17:08 pm
por Sk9ITk5Z
ayuda para crear una base de datos
Bases de Datos
naruk 1 2,606 Último mensaje 12 Mayo 2010, 07:19 am
por Pazador
Ayuda necesito conectar un buscador a una base de datos en C++
Programación C/C++
LAOMGD 2 4,298 Último mensaje 1 Agosto 2011, 09:19 am
por 4rkn63l
Necesito ayuda con el codigo de una Base de Datos en Mysql
Bases de Datos
eda6 3 3,617 Último mensaje 8 Julio 2012, 22:59 pm
por eda6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines