[Datenbank] Entwerfen Sie eine Struktur für eine Mitarbeiter-Datenbank

21.08.2012 09:59 Uhr

In einer Datenbank für ein Intranet sollen Mitarbeiter eines Unternehmens, mit Name und E-Mail-Adresse sowie der Zuordnung zu Abteilung, Berufsbezeichnung und Raumnummer, gelistet werden.

Hierbei können mehrere Mitarbeiter dieselbe Abteilung, Berufsbezeichnung und/oder Raumnummer haben.

 

Aufgabe
Skizzieren Sie den Aufbau den eine solche Datenbank haben könnte, mit Blick auf geringe Datenredundanz.

 

4 Antworten

#1

21.08.2012 10:13 Uhr

Ist das euer Ernst? Das ist Bestandteil einer Bachelor Informatik Prüfung!

#2

21.08.2012 10:44 Uhr
-- -----------------------------------------------------
-- Table `intranet`.`users`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `intranet`.`users` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `firstname` VARCHAR(100) NOT NULL ,
  `lastname` VARCHAR(100) NOT NULL ,
  `email` VARCHAR(100) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `intranet`.`departments`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `intranet`.`departments` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(100) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `intranet`.`jobs`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `intranet`.`jobs` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(100) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `intranet`.`rooms`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `intranet`.`rooms` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(100) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `intranet`.`user_use_rooms`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `intranet`.`user_use_rooms` (
  `user` INT UNSIGNED NOT NULL ,
  `room` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`user`, `room`) ,
  INDEX `user_room` (`user` ASC) ,
  INDEX `room` (`room` ASC) ,
  CONSTRAINT `user_room`
    FOREIGN KEY (`user` )
    REFERENCES `intranet`.`users` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `room`
    FOREIGN KEY (`room` )
    REFERENCES `intranet`.`rooms` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `intranet`.`user_has_job`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `intranet`.`user_has_job` (
  `user` INT UNSIGNED NOT NULL ,
  `job` INT UNSIGNED NOT NULL ,
  INDEX `user` (`user` ASC) ,
  PRIMARY KEY (`user`, `job`) ,
  INDEX `job` (`job` ASC) ,
  CONSTRAINT `user`
    FOREIGN KEY (`user` )
    REFERENCES `intranet`.`users` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `job`
    FOREIGN KEY (`job` )
    REFERENCES `intranet`.`jobs` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `intranet`.`user_belongs_to_department`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `intranet`.`user_belongs_to_department` (
  `user` INT UNSIGNED NOT NULL ,
  `department` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`user`, `department`) ,
  INDEX `user_department` (`user` ASC) ,
  INDEX `department` (`department` ASC) ,
  CONSTRAINT `user_department`
    FOREIGN KEY (`user` )
    REFERENCES `intranet`.`users` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `department`
    FOREIGN KEY (`department` )
    REFERENCES `intranet`.`departments` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

#3

23.08.2012 16:13 Uhr

Für eine geringe Datenredundanz verteilt man an Räume, Berufe und Abteilungen eindeutige IDs (Integer), die dann als Fremdschlüssel im Mitarbeiterdatensatz hinterlegt werden.

Die folgende Grafik zeigt schematisch den Aufbau der Datenbank:

Datenbankentwurf

#4

02.09.2012 18:09 Uhr

CREATE DATABASE dbMitarbeiter

CREATE TABLE tMitarbeiter
(
Id int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(Id),
Name varchar(15),
Email varchar(50),
AbteilungId int,

BerufId int,

RaumId int
)

CREATE TABLE tAbteilung
(
Id int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(Id),
Abteilung varchar(50)

)

CREATE TABLE tBeruf
(
Id int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(Id),
Beruf varchar(50)

)

CREATE TABLE tRaum
(
Id int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(Id),
Raumnr int

)

Ähnliche Fragen



Datenschutzerklärung · Impressum