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


    :



    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;

  • 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:



    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

    Einmal editiert, zuletzt von lukasn () aus folgendem Grund: Fehlende Kommas eingesetzt