Risoluzione cardinalità 1:M

di il
7 risposte

Risoluzione cardinalità 1:M

Ciao a tutti,
Avrei una domanda su come risolvere una determinata associazione.
Supponiamo di avere un'associazione tra due entità A e B.
Tralasciando la cardinalità minima, se tra le due entità ho un'associazione con cardinalità max 1:3 come faccio in fase di implementazione a far rispettare questo vincolo?
Mi spiego con un esempio:
Supponiamo di avere l'entità dipendente e l'entità progetto
Un dipendente può lavorare al massimo in un progetto e ad un progetto possono lavorare al massimo 3 dipendenti(associazione 1:3).
Come faccio nel DMBS a far rispettare questo vincolo?
In attesa di vostri consigli

7 Risposte

  • Re: Risoluzione cardinalità 1:M

    antcru ha scritto:


    Un dipendente può lavorare al massimo in un progetto e ad un progetto possono lavorare al massimo 3 dipendenti(associazione 1:3).Come faccio nel DMBS a far rispettare questo vincolo?
    Ma un Progetto non ha una DataInizio e DataFine? Terminato un Progetto, non se ne inizia un altro? Se sì, almeno nel tempo, un Dipendente partecipa comunque a molti Progetti. Io ci vedrei una tabella di congiunzione PartecipantiProgetti.
    Questo discorso del max 3 è fisso/rigido e nessuno mai lo modificherà in futuro? Oppure non si sa mai come potrebbero cambiare le cose?
  • Re: Risoluzione cardinalità 1:M

    Grazie per la risposta.
    La situazione non è naturalmente realistica, mi serviva solo come esempio.
    Mi interessa capire come limitare che ad un progetto possano partecipare al max 3 dipendenti.
    Se la relazione fosse stata di tipo 1:N(ovvero un dipendente può partecipare solo ad un progetto e ad un progetto possono partecipare N dipendenti) nonavrei avuto problemi. E' limitare la cardinalità max che non so come fare!
  • Re: Risoluzione cardinalità 1:M

    Si può fare con un trigger ON INSERT. Non credo che esistano altri metodi.
  • Re: Risoluzione cardinalità 1:M

    Il trigger potrebbe non essere disponibile con alcuni dbms più semplici.

    Un caso simile sarebbe affrontato a livello applicativo. Ma non è un caso standard.
  • Re: Risoluzione cardinalità 1:M

    Io parto dal fatto che hai comunque 3 tabelle Progetti molti-a-molti Dipendenti con tabella di congiunzione PartecipantiProgetti, quest'ultima con i seguenti campi:
    IDPartecipantiProgetti (numerazione automatica, chiave primaria)
    DataInizio
    DataFine
    IDDipendente (numerico)
    IDProgetto (numerico)

    Sicuramente devi organizzare un codice VBA (parlo almeno per Access) che effettui un controllo subito dopo la digitazione/selezione del campo PartecipantiProgetti.IDProgetto
    Io ci vedrei una "query di selezione" (Query1) sulla tabella PartecipantiProgetti con un filtro ad esempio:
    [Forms]![NomeMaschera]![IDProgetto].
    Sulla maschera dove digiti/selezioni tale IDProgetto, all'evento "Dopo aggiornamento" ci vedrei un codice più o meno così
    Private Sub IDProgetto_AfterUpdate()
    DoCmd.RunCommand acCmdSaveRecord
    If DCount("*", "Query1") > 3 Then MsgBox "Attento, stai aggiungendo un quarto Dipendente a questo Progetto"
    End Sub
  • Re: Risoluzione cardinalità 1:M

    oregon ha scritto:


    Il trigger potrebbe non essere disponibile con alcuni dbms più semplici.

    Un caso simile sarebbe affrontato a livello applicativo. Ma non è un caso standard.
    Certo. Io proponevo solo la soluzione di più "basso livello", poi ovviamente a livello applicativo si può fare tutto.
  • Re: Risoluzione cardinalità 1:M

    Grazie a tutti per le risposte.
    Il codice VBA lo vedo adatta
    Grazie ancora
Devi accedere o registrarti per scrivere nel forum
7 risposte