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
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.
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 (sql) [Seleccionar]
-- MySQL Workbench Synchronization
-- Generated: 2015-06-27 13:45
-- Model: New Model
-- Version: 1.0
-- Project: Name of the project
-- Author: WHK
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE TABLE IF NOT EXISTS `blank`.`sedes` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`campus` VARCHAR(512) NOT NULL,
`direccion` VARCHAR(512) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`sedes_telefonos` (
`sede_id` INT(11) NOT NULL,
`codigo_pais` INT(11) NOT NULL,
`codigo_ciudad` INT(11) NOT NULL,
`numero` INT(11) NOT NULL,
`es_fijo` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`sede_id`),
CONSTRAINT `fk_sedes_telefonos_sede`
FOREIGN KEY (`sede_id`)
REFERENCES `blank`.`sedes` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`usuarios` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nombres` VARCHAR(45) NOT NULL,
`apellidos` VARCHAR(45) NOT NULL,
`direccion` VARCHAR(512) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`usuarios_telefonos` (
`usuario_id` INT(11) NOT NULL AUTO_INCREMENT,
`codigo_pais` INT(11) NOT NULL,
`codigo_ciudad` INT(11) NOT NULL,
`numero` INT(11) NOT NULL,
`es_fijo` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`usuario_id`),
CONSTRAINT `fk_usuarios_telefonos_usuarios1`
FOREIGN KEY (`usuario_id`)
REFERENCES `blank`.`usuarios` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`correos` (
`usuario_id` INT(11) NOT NULL,
`correo` VARCHAR(65) NOT NULL,
PRIMARY KEY (`usuario_id`),
CONSTRAINT `fk_usuarios_correos_usuarios1`
FOREIGN KEY (`usuario_id`)
REFERENCES `blank`.`usuarios` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`usuarios_sedes_relacion` (
`usuario_id` INT(11) NOT NULL,
`sede_id` INT(11) NOT NULL,
PRIMARY KEY (`usuario_id`, `sede_id`),
INDEX `fk_usuarios_sedes_relacion_sede1_idx` (`sede_id` ASC),
CONSTRAINT `fk_usuarios_sedes_relacion_usuarios1`
FOREIGN KEY (`usuario_id`)
REFERENCES `blank`.`usuarios` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_usuarios_sedes_relacion_sede1`
FOREIGN KEY (`sede_id`)
REFERENCES `blank`.`sedes` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`usuarios_roles` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nombres` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`usuarios_roles_relacion` (
`usuario_id` INT(11) NOT NULL,
`usuarios_rol_id` INT(11) NOT NULL,
PRIMARY KEY (`usuario_id`, `usuarios_rol_id`),
INDEX `fk_usuarios_roles_relacion_usuarios_roles1_idx` (`usuarios_rol_id` ASC),
CONSTRAINT `fk_usuarios_roles_relacion_usuarios1`
FOREIGN KEY (`usuario_id`)
REFERENCES `blank`.`usuarios` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_usuarios_roles_relacion_usuarios_roles1`
FOREIGN KEY (`usuarios_rol_id`)
REFERENCES `blank`.`usuarios_roles` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`alumnos_datos` (
`usuario_id` INT(11) NOT NULL,
`carrera_id` INT(11) NOT NULL,
PRIMARY KEY (`usuario_id`, `carrera_id`),
INDEX `fk_alumnos_datos_carreras1_idx` (`carrera_id` ASC),
CONSTRAINT `fk_alumnos_datos_usuarios1`
FOREIGN KEY (`usuario_id`)
REFERENCES `blank`.`usuarios` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_alumnos_datos_carreras1`
FOREIGN KEY (`carrera_id`)
REFERENCES `blank`.`carreras` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`carreras` (
`id` INT(11) NOT NULL,
`nombre` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`administrativo_datos` (
`usuario_id` INT(11) NOT NULL,
`cargo_id` INT(11) NOT NULL,
PRIMARY KEY (`usuario_id`, `cargo_id`),
INDEX `fk_administrativo_datos_cargos1_idx` (`cargo_id` ASC),
CONSTRAINT `fk_administrativo_datos_cargos1`
FOREIGN KEY (`cargo_id`)
REFERENCES `blank`.`cargos` (`int`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_administrativo_datos_usuarios1`
FOREIGN KEY (`usuario_id`)
REFERENCES `blank`.`usuarios` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`cargos` (
`int` INT(11) NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(45) NOT NULL,
PRIMARY KEY (`int`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`catedraticos_datos` (
`usuario_id` INT(11) NOT NULL,
`asignatura_id` INT(11) NOT NULL,
PRIMARY KEY (`usuario_id`, `asignatura_id`),
INDEX `fk_catedraticos_asignaturas1_idx` (`asignatura_id` ASC),
CONSTRAINT `fk_catedraticos_asignaturas1`
FOREIGN KEY (`asignatura_id`)
REFERENCES `blank`.`asignaturas` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_catedraticos_usuarios1`
FOREIGN KEY (`usuario_id`)
REFERENCES `blank`.`usuarios` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `blank`.`asignaturas` (
`id` INT(11) NOT NULL,
`nombre` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
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.