Navigation überspringen

n:m Beziehung

Definition

Läßt sich zu beliebig vielen Tupeln der Tabelle A beliebig viele Tupel der Tabelle B in Bezoiehung setzen, so liegt eine n:m-Beziehung vor.

Beispiel

Wir erweitern unser Beispiel aus Abschnitt 1:1-Beziehung.

Situationsbeschreibung:

Personen sind wohnhaft in einem Ort und nehmen an einer exklusiven Umfrage teil. Als neue Beziehung im Beziehungsgeflacht kommt hinzu, dass Personen verschiedene Buslinien nehmen können. Die Buslinien wiederum stehen bielibig vielen anderen Personen zur Verfügung. Es liegt demnach eine n:m-Beziehung zwischen Personen und Buslinie vor. Im ER-Modell sieht das wie folgt aus:

Der SQL-Teil dazu sieht aus wie folgt:

-- --------------------------------------------------------
-- Host:                         127.0.0.1
-- Server Version:               10.1.21-MariaDB - mariadb.org binary distribution
-- Server Betriebssystem:        Win32
-- HeidiSQL Version:             9.4.0.5125
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;


-- Exportiere Datenbank Struktur für ivdatenbanken
CREATE DATABASE IF NOT EXISTS `ivdatenbanken` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `ivdatenbanken`;

-- Exportiere Struktur von Tabelle ivdatenbanken.buslinie
CREATE TABLE IF NOT EXISTS `buslinie` (
  `BuslinieID` int(11) NOT NULL AUTO_INCREMENT,
  `StreckenID` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`BuslinieID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Daten Export vom Benutzer nicht ausgewählt
-- Exportiere Struktur von Tabelle ivdatenbanken.nimmtbuslinie
CREATE TABLE IF NOT EXISTS `nimmtbuslinie` (
  `BuslinieID` int(11) NOT NULL,
  `PersonenID` int(11) NOT NULL,
  KEY `FK_nimmtbuslinie_buslinie` (`BuslinieID`),
  KEY `FK_nimmtbuslinie_personendaten` (`PersonenID`),
  CONSTRAINT `FK_nimmtbuslinie_buslinie` FOREIGN KEY (`BuslinieID`) REFERENCES `buslinie` (`BuslinieID`),
  CONSTRAINT `FK_nimmtbuslinie_personendaten` FOREIGN KEY (`PersonenID`) REFERENCES `personendaten` (`PersonenID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Daten Export vom Benutzer nicht ausgewählt
-- Exportiere Struktur von Tabelle ivdatenbanken.orte
CREATE TABLE IF NOT EXISTS `orte` (
  `OrtID` int(11) NOT NULL AUTO_INCREMENT,
  `OrtBezeichnung` varchar(50) NOT NULL DEFAULT '0',
  `OrtPLZ` int(5) NOT NULL DEFAULT '0',
  PRIMARY KEY (`OrtID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Daten Export vom Benutzer nicht ausgewählt
-- Exportiere Struktur von Tabelle ivdatenbanken.personendaten
CREATE TABLE IF NOT EXISTS `personendaten` (
  `PersonenID` int(11) NOT NULL AUTO_INCREMENT,
  `Vorname` varchar(50) NOT NULL DEFAULT '0',
  `Nachname` varchar(50) NOT NULL DEFAULT '0',
  `OrtID` int(11) NOT NULL,
  PRIMARY KEY (`PersonenID`),
  KEY `FK_personendaten_orte` (`OrtID`),
  CONSTRAINT `FK_personendaten_orte` FOREIGN KEY (`OrtID`) REFERENCES `orte` (`OrtID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Daten Export vom Benutzer nicht ausgewählt
-- Exportiere Struktur von Tabelle ivdatenbanken.umfrage
CREATE TABLE IF NOT EXISTS `umfrage` (
  `PersonenID` int(11) NOT NULL AUTO_INCREMENT,
  `AntwortFrageA` varchar(50) NOT NULL DEFAULT '0',
  `AntwortFrageB` varchar(50) NOT NULL DEFAULT '0',
  PRIMARY KEY (`PersonenID`),
  CONSTRAINT `FK_umfrage_personendaten` FOREIGN KEY (`PersonenID`) REFERENCES `personendaten` (`PersonenID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Daten Export vom Benutzer nicht ausgewählt
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

Woher kommt die neue Relation: nimmtbuslinie?

Eine n:m Beziehung würde bedeuten, dass in zwei Tabellen die Schlüssel beliebig häufig vorkommen können. Das wiederspricht aber der Definition eines Primärschlüssels.

Abhilfe verschafft uns hier die Ableitungsregel des ER-Modells:

Die Beziehung selbst der beiden Relationen zueinander ist mit Kardinalitäten belegt. Beachten Sie, dass auf der Seite des Primärschlüssels laut Definition die Kardinalität 1 sein muss. somit treffen sich bei einer n:m-Beziehung die n- und m-Kardinalitäten bei der Beschreibung der Beziehung (Parallelogramm). Das hat zur Folge, dass die Beziehungsbeschreibung selbst als Hilfs-Relation implementiert wird. Diese Hilfs-Relation trägt dann wiederum nur Primärschlüssel und keine eigenen Attribute. Dadurch entstehen 1:n-Beziehungen zu den beteiligten Haupt-Relationen, siehe ER-Modell oben. Für diese Beziehung gilt wiederum der Abschnitt 1:n-Beziehung.