[Datenbank] Entwerfen Sie eine Struktur für eine Mitarbeiter-Datenbank Frage [Datenbank] Entwerfen Sie eine Struktur für eine Mitarbeiter-Datenbank zu Favoriten hinzufügen

Daumen hoch 1 Daumen runter

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.

 

Antworten


Diese Antwort als GUT bewerten 1 Diese Antwort als SCHLECHT bewerten
-- -----------------------------------------------------
-- 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;

Vertan vertan sprach der Hahn, als er von der Ente kam :). Ich hab gedacht das ein Mitarbeiter mehre Jobs haben kann. So wie z.B. Entwickler und Datenschutz Beauftragter.

thorsten am 03.09.2012
Diese Antwort als GUT bewerten 3 Diese Antwort als SCHLECHT bewerten

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

Diese Antwort als GUT bewerten 1 Diese Antwort als SCHLECHT bewerten

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

Diese Antwort als GUT bewerten 1 Diese Antwort als SCHLECHT bewerten

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

)

Deine Antwort

Registrierter User Bereits registriert? Bitte logge dich vor dem Antworten ein.

Deine Daten