Ergebnis 1 bis 5 von 5

Thema: Trigger für Begrenzung von Tabelleneinträgen

  1. #1
    s_boeckmann ist offline Neuer Benutzer
    Registriert seit
    04.02.2007
    Beiträge
    3

    Standard Trigger für Begrenzung von Tabelleneinträgen

    Hallo zusammen,

    als Neuling in diesem Forum und beim Thema Trigger habe ich fogendes Problem:

    Für den Trigger habe ich folgende Tabellen erstellt:

    CREATE TABLE Mannschaft
    (
    ID_Mannschaft int NOT NULL,
    FK_ID_Trainer int NOT NULL,
    Mannschaftsname varchar(40) NOT NULL,
    CONSTRAINT Mannschaft_pkey PRIMARY KEY (ID_Mannschaft),
    CONSTRAINT Mannschaft_FK_ID_Trainer_fkey FOREIGN KEY (FK_ID_Trainer)
    REFERENCES Trainer (FK_ID_Trainer) MATCH SIMPLE
    ON UPDATE RESTRICT ON DELETE RESTRICT
    )


    CREATE TABLE Spieler
    (
    FK_ID_Spieler int NOT NULL,
    Spielername varchar(40) NOT NULL,
    CONSTRAINT Spieler_pkey PRIMARY KEY (FK_ID_Spieler),
    CONSTRAINT Spieler_FK_ID_Spieler_fkey FOREIGN KEY (FK_ID_Spieler)
    REFERENCES Mitglieder (FK_ID_Mitglied) MATCH SIMPLE
    ON UPDATE CASCADE ON DELETE CASCADE
    )


    CREATE TABLE Kader
    (
    FK_ID_Mannschaft int NOT NULL,
    FK_ID_Spieler int NOT NULL,
    CONSTRAINT Kader_pkey PRIMARY KEY (FK_ID_Mannschaft, FK_ID_Spieler),
    CONSTRAINT Kader_FK_ID_Mannschaft_fkey FOREIGN KEY (FK_ID_Mannschaft)
    REFERENCES Mannschaft (ID_Mannschaft) MATCH SIMPLE
    ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT Kader_FK_ID_Spieler_fkey FOREIGN KEY (FK_ID_Spieler)
    REFERENCES Spieler (FK_ID_Spieler) MATCH SIMPLE
    ON UPDATE CASCADE ON DELETE CASCADE
    )


    Soweit so gut, nun will ich aber die maximale Anzahl von Spielern in einer Mannschaft begrenzen, bspw. auf 8 Spieler je Mannschaft. Ich wollte dies mit einem Trigger lösen, doch leider weiß ich nicht genau wie:

    CREATE TRIGGER `trigger01`
    BEFORE INSERT
    ON `kader`
    FOR EACH ROW/STATEMENT
    BEGIN
    ?? Abfrage wieviele Spieler bisher in der Mannschaft sind, wenn weniger als zulässiges Maximum je Mannschaft, dann füge Datensatz hinzu, ansonsten breche den Insert-Vorgang ab
    END;

    Bei den verbalen Ausführungen brächte ich eure Hilfe. Vorab schon mal herzlichen Dank.

    Gruß
    Sebastian

  2. #2
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von s_boeckmann Beitrag anzeigen

    Soweit so gut, nun will ich aber die maximale Anzahl von Spielern in einer Mannschaft begrenzen, bspw. auf 8 Spieler je Mannschaft. Ich wollte dies mit einem Trigger lösen, doch leider weiß ich nicht genau wie:

    Mit anderen Worten: die table darf nur maximal N Einträge haben. Der pure Zufall will, daß ich dafür einen passenden Link habe:

    http://people.planetpostgresql.org/g...s-version.html

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    s_boeckmann ist offline Neuer Benutzer
    Registriert seit
    04.02.2007
    Beiträge
    3

    Standard

    Hallo Andreas,

    danke für den Link, doch wird darin ein recht hartes Vorgehen beschrieben, da man nach dem FIFO-Prinzip Daten einfach löscht - das will ich nicht.
    In meiner Tabelle Kader können maximal Anzahl von Mannschaften * max. Spieler pro Mannschaft Einträge sein.

    Gruß
    Sebastian

  4. #4
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von s_boeckmann Beitrag anzeigen
    Hallo Andreas,

    danke für den Link, doch wird darin ein recht hartes Vorgehen beschrieben, da man nach dem FIFO-Prinzip Daten einfach löscht - das will ich nicht.
    In meiner Tabelle Kader können maximal Anzahl von Mannschaften * max. Spieler pro Mannschaft Einträge sein.

    Gruß
    Sebastian
    Okay, schreib einen before-trigger, der in NEW nach der ID für die Mannschaft schaut und dann ermittelt, wie viele schon drin sind. Ich hab das mal gemacht, folgendes sollte in etwa dann das machen, was du willst. Du mußt nur die Obergrenze anpassen:

    Code:
    create or replace function max_spieler() returns trigger as $$
    declare anzahl int;
    begin
            select into anzahl count(1) from kader where mannschaft = NEW.mannschaft;
            if anzahl > 5 then
                    raise exception 'max. spieleranzahl erreicht';
            end if;
            return NEW;
    end;
    $$ language plpgsql;
    
    create trigger max_spieler before insert on kader for each row execute procedure max_spieler();
    Da die Überprüfung auf > 5 vor dem INSERT erfolgt, kannst Du so also max. 6 Spieler pro Mannschaft eingeben, dann kommt:

    Code:
    test=*# insert into kader values (1,7);
    ERROR:  max. spieleranzahl erreicht
    test=!#

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    s_boeckmann ist offline Neuer Benutzer
    Registriert seit
    04.02.2007
    Beiträge
    3

    Standard

    Nochmals danke für die promte Antwort.

    Gruß
    Sebastian

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 18.08.2010, 13:19
  2. UPDATE Trigger oder INSERT Trigger
    Von traxanos im Forum Trigger und Funktionen
    Antworten: 8
    Letzter Beitrag: 18.05.2010, 12:59

Berechtigungen

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

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum