Ergebnis 1 bis 2 von 2

Thema: Sql Datenbankmodel

  1. #1
    HTML Newbie
    Registriert seit
    13.03.2014
    Beiträge
    2
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Sql Datenbankmodel

    Hallo,
    In meiner Schule habe ich die Aufgabe bekommen eine Mysql Datenbank zu erstellen.
    Die mysql Datenbank beinhaltet verschiedene ATG Läufe z.b. Atg2011, Atg 2012. Bei jedem Lauf gibt es verschiedene Sportarten z.B. Schwimmen,Radfahren usw.
    Nun mein Problem: Mit der folgenden Datenbank kann man meines Erachtens nur einen Läufer eine Startnummer zu ordnen die er dann im lauf 2011 so wie im lauf 2012 hat. Jedoch sollte jeder Lauf eine Neuverteilung der Startnummern haben. Ein anderer Punkt ist, dass bei mir eine ZwischenTabelle zwischen Sponsor und Teilnahme fehlt. Am Anfang hatte ich die Tabelle mit (ID , FK_Sponsor und Fk_Startnummer) erstellet jedoch wollte mein Lehrer das ich die ID wegnehme und einen Kombinierten Primary Key erstelle. Ich hab es Getan aber ich bekomm bei der Tabelle immer ein Error ausgegeben .
    Meine jetzige Datenbank sieht wie folgt aus

    :SQL.jpg


    DROP DATABASE IF EXISTS Atg2012;
    CREATE DATABASE Atg2012;
    USE Atg2012;


    SET FOREIGN_KEY_CHECKS=0;


    Create Table tbl_Sportart
    (
    pk_Sportart varchar(40),
    Primary Key(pk_Sportart)
    )
    Engine=InnoDB;


    CREATE TABLE tbl_Teilnehmer
    (
    pk_TeilnehmerID INT AUTO_INCREMENT,
    fk_Geschlecht CHAR (1),
    Name VARCHAR (25) NOT NULL,
    Vorname VARCHAR (25) NOT NULL,
    Geburtsdatum DATE NOT NULL,
    PRIMARY KEY(pk_TeilnehmerID),
    FOREIGN KEY(fk_Geschlecht)
    REFERENCES tbl_Geschlecht(pk_Geschlecht)
    ON DELETE NO ACTION
    ON UPDATE CASCADE
    )
    ENGINE=INNODB;


    CREATE TABLE tbl_Teilnahme
    (
    Startnummer INT,
    fk_TeilnehmerID INT,
    fk_Sponsor INT,
    fk_Altersklasse VARCHAR (5) NOT NULL,
    fk_Lauf VARCHAR (20) NOT NULL,
    fk_Verein VARCHAR(50),
    Platzierung INT,
    Platzierung_AK INT,
    Zeit TIME,
    fk_Sportart VARCHAR(40),
    PRIMARY KEY(Startnummer,fk_Lauf),
    FOREIGN KEY(fk_Sponsor)
    REFERENCES tbl_teilnahmesponsor(fk_Spnsor)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
    FOREIGN KEY(fk_Altersklasse)
    REFERENCES tbl_Altersklasse(pk_Altersklasse)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
    FOREIGN KEY(fk_Lauf)
    REFERENCES tbl_Lauf(pk_Lauf)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
    FOREIGN KEY(fk_Verein)
    REFERENCES tbl_Verein(pk_Verein)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
    FOREIGN KEY(fk_Sportart)
    REFERENCES tbl_Sportart(pk_Sportart)
    ON DELETE NO Action
    ON UPDATE CASCADE,
    FOREIGN KEY(fk_TeilnehmerID)
    REFERENCES tbl_Teilnehmer(pk_TeilnehmerID)
    ON DELETE NO Action
    ON UPDATE CASCADE
    )
    ENGINE=INNODB;


    CREATE TABLE tbl_Verein
    (
    pk_Verein VARCHAR (50),
    PRIMARY KEY(pk_Verein)
    )
    ENGINE=INNODB;


    CREATE TABLE tbl_Geschlecht
    (
    pk_Geschlecht CHAR (1),
    PRIMARY KEY(pk_Geschlecht)
    )
    ENGINE=INNODB;


    CREATE TABLE tbl_Altersklasse
    (
    pk_Altersklasse VARCHAR(5),
    PRIMARY KEY(pk_Altersklasse)
    )
    ENGINE=INNODB;


    CREATE TABLE tbl_Lauf
    (
    pk_Lauf VARCHAR (30),
    PRIMARY KEY(pk_Lauf)
    )
    ENGINE=INNODB;


    CREATE TABLE tbl_Sponsor
    (
    pk_Sponsor VARCHAR (20),
    PRIMARY KEY(pk_Sponsor)
    )
    ENGINE=INNODB;


    CREATE TABLE tbl_Teilnahmesponsor
    (
    fk_Sponsor VARCHAR(20),
    fk_Startnummer INT,
    PRIMARY KEY(fk_Sponsor, fk_Startnummer),
    FOREIGN KEY(fk_Sponsor)
    REFERENCES tbl_Sponsor(pk_Sponsor)
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
    FOREIGN KEY(fk_Startnummer)
    REFERENCES tbl_Teilnahme(Startnummer)
    ON DELETE NO ACTION
    ON UPDATE CASCADE
    )
    ENGINE=INNODB;

    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Geändert von scrabbler (13.03.2014 um 20:56 Uhr)

  2. #2
    Meister(in) Avatar von lukasn
    Registriert seit
    23.02.2008
    Ort
    Schweiz
    Alter
    27
    Beiträge
    491
    Danke
    2
    Bekam 12 mal "Danke" in 11 Postings

    Standard AW: Sql Datenbankmodel

    Mit der Startnummer gibt es eigentlich kein problem. Für jeden Lauf (2011, 2012...) wird ja pro Teilnehmer eine neue Teilnahme erstellt. Da die Startnummer an die Teilnahme gebunden ist, kann er also bei jedem Lauf eine neue Nummer haben.

    Was den Sponsoren angeht gehe ich jetzt mal von einer m:n Beziehung aus. In dem Fall wäre es eine ganz normale transformierte Tabelle:

    Code:
    CREATE TABLE tbl_sponsor_teilnahme (
        fk_sponsor VARCHAR(20),
        fk_teilnahme INT(11),
        PRIMARY KEY(fk_sponsor, fk_teilnahme),
        FOREIGN KEY (fk_teilnahme)
            REFERENCES tbl_teilnahme(Startnummer)
            ON DELETE CASCADE ON UPDATE CASCADE,
        FOREIGN KEY (fk_sponsor)
            REFERENCES tbl_sponsor(pk_Sponsor)
            ON DELETE CASCADE ON UPDATE CASCADE
    );
    Würde mir aber noch überlegen, ob der VARCHAR als Primary Key wirklich Sinn macht beim Sponsoren. Allgemein denke ich, es wären noch einige zusätzliche Attribute angebracht bei Lauf, Altersklasse, Verein, Sponsor und Sportart.


    Gruss,
    -Lukas
    Geändert von lukasn (14.03.2014 um 15:38 Uhr) Grund: Fehlende Kommas eingesetzt

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •