Psql vincolo numero di righe

di il
8 risposte

Psql vincolo numero di righe

Ok salve a tutti, uso postgresql da riga di comando per un'esame la mia situazione:

ho una tabella squadra(nome,portieri,difensori,centrocampisti,attaccanti), senza chiave primaria l'attributo nome è il nome della squadra e gli attributi portieri,difensori,centrocampisti e attaccanti hanno una chiave esterna verso altre tabelle da cui prendono di fatto i giocatori....

il mio problema è che voglio mettere un vincolo per cui i portieri devono essere 3 per squadra,i difensori 8,i centrocampisti 8 e gli attaccanti 6 ( quindi quando provo a inserire una n-upla che va oltre il limite mi dovrebbe dare errore)...

ho provato con il comando check ma non mi fà inserire delle subquery nelle condizioni...quindi ho pensato ai trigger...qualcuno può aiutarmi?? magari che ha avuto lo stesso problema?? grazie in anticipo ...

8 Risposte

  • Re: Psql vincolo numero di righe

    Ciao, potresti scrivere la create table della tabella squadra e della tabella ad esempio portieri?

    Per capire meglio il problema...
  • Re: Psql vincolo numero di righe

    Ok allora:

    create table squadra(
    nome char(20),
    portieri char(20),
    difensori char(20),
    centrocampisti char(20),
    attaccanti char(20),
    foreign key(portieri) references portieri(nome),
    foreign key(difensori) references difensori(nome),
    foreign key(centrocampisti) references centrocampisti(nome),
    foreign key(attaccanti) references attaccanti(nome);

    create table portieri(
    nome char(20) not null primary key references giocatori(nome)); // (giocatori è l'insieme di tutti portieri difensori ecc...)

    ho provato una cosa del genere:
    CREATE FUNCTION max_portieri() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
    declare
    max integer;
    begin
    max:=(select count(*) from squadra where portieri is not null AND nome is not null group by nome);
    if(max > 3) then
    raise exception 'limite massimo portieri';
    return new;
    end if;end;
    $$;

    CREATE TRIGGER max_portieri BEFORE INSERT ON squadra FOR EACH ROW EXECUTE PROCEDURE max_portieri();

    può andare? sono sulla strada giusta almeno? o si può fare in maniera più semplice?
  • Re: Psql vincolo numero di righe

    Ciao,

    Anche l'idea del trigger potrebbe funzionare, ma in questo caso e' del tutto superflua.

    La tua idea iniziale era secondo me la strada migliore ossia quella del check.

    Ad esempio ti scrivo il caso del 3 portieri per squadra.

    Nella create table...

    portieri char(20) check( 3 <= ( select count(*)
    from portieri
    where portieri.nome = portieri)),

    Fammi sapere se funziona... Ciao
  • Re: Psql vincolo numero di righe

    Guarda ho provato ma mi dà il solito errore:

    create table squadra(
    nome char(20),
    portieri char(20) check( 3 <= ( select count(*)
    from portieri
    where portieri.nome = portieri)),
    difensori char(20),
    centrocampisti char(20),
    attaccanti char(20),
    foreign key(portieri) references portieri(nome),
    foreign key(difensori) references difensori(nome),
    foreign key(centrocampisti) references centrocampisti(nome),
    foreign key(attaccanti) references attaccanti(nome));

    ERROR: cannot use subquery in check constraint

    in effetti per fare una cosa del genere non dovrebbe esserci bisogno di un trigger...comunque boh non ci salto fuori
  • Re: Psql vincolo numero di righe

    Ciao non si deve fare necessariamente con un trigger.

    La sintassi che ti ho scritto e' lecita e testata...

    Adesso cerchiamo di capire il perche' non va nel tuo caso

    Inanzitutto, hai provveduto a creare prima la tabella portieri e poi quella squadra? Perche' se per una svista hai invertito l'ordine ovviamente non funzionera....
  • Re: Psql vincolo numero di righe

    Si si la tabella portieri è già creata, dopo cerco di creare quella squadra con il vincolo ma niente mi dà quell'errore
  • Re: Psql vincolo numero di righe

    Scusate se la sintassi è giusta perchè mi dà quell'errore? nessuno lo sa?
  • Re: Psql vincolo numero di righe

    Ciao,
    quando esegui lo script della creazione della tabella, sicuro non ci siano altre isctruzioni sql prima o dopo?
    nel caso metti un GO x ogni istruzione eseguita...
Devi accedere o registrarti per scrivere nel forum
8 risposte