Integrità referenziale senza campo correlato è possibile?

di il
8 risposte

Integrità referenziale senza campo correlato è possibile?

Buongiorno a tutti in fase di progettazione del DB mi si presenta questo.
Scusate se vi potrà sembrare banale ma ci sto provando..


Tabella Clienti
Tabella Azioni

con relazione Clienti.ID(Primaria)-1--------M-Azioni.IdClienti(esterna)

La tabella Azioni mi serve per inserire sia appuntamenti/altro riferiti a Clienti . Ma la vorrei usare anche per contenere
altri appuntamenti/altro che non hanno ancora un Cliente ....
Quindi la relazione con integrità referenziale è importante nel caso in cui si tratta di una "Azione" che si riferisce a un Cliente
ma mi impedisce di poter registrare altre "Azioni" per cui il Cliente corrispondente non esiste ancora...o per cui non c'è bisogno
che ci sia....
Secondo voi devo per forza ripensare le tabelle ? In che modo ?
Oppure c'è una maniera per avere la moglie con la botte ubriaca sotto la panca ?

8 Risposte

  • Re: Integrità referenziale senza campo correlato è possibile?

    Nella tabella Clienti inserisci un record "fantasma", avente comunque un proprio IDCliente, ma in Cognome Nome lasci vuoto. Per gli appuntamenti con nonClienti puoi sfruttare questo valore.
  • Re: Integrità referenziale senza campo correlato è possibile?

    Ciao

    Qualcosa mi sfugge.
    Per come la ricordo io, l'integrità referenziale scatta solo nel momento in cui nella tabella metti un valore diverso da null, altrimenti il controllo NON viene eseguito (essendoci null, non deve cercare nulla nell'altra tabella).

    Nel caso del tuo esempio, dovresti dire che il campo Azioni.IdCliente è un campo che accetta il valore null (quindi nullable) e che ha la relazione con la tabella Clienti.Id

    In questo modo:
    - Per le azioni in cui non c'è il cliente di riferimento, lasci il campo IdCliente a null
    - Per le azioni in cui c'è il riferimento cliente, metti un campo IdCliente valido (e quindi si attivano i vincoli)
  • Re: Integrità referenziale senza campo correlato è possibile?

    Non deve essere 'null' la chiave primaria, mentre possono essere 'null' glia altri valori.
    Inoltre puoi seemplicemente chiamare il CLIENTE 'fantasma' ...
  • Re: Integrità referenziale senza campo correlato è possibile?

    TABELLA CLIENTE
    =====================
    IdCliente Ragione Sociale ...
    ----------------------------------------
    1 Rossi Giuseppe
    ...
    93 Neri Giovanni
    94 Fantasma
    ...
    TABELLA APPUNTMENTI
    ====================
    dAppuntamento IdCliente Data Località ...
    --------------------------------------------------------------------
    ...
    1123 93 12/11/21 Casa Mia
    1124 94 4/5/22 al bar Questa riga è senza riferimento a un cliente reale
    ...
  • Re: Integrità referenziale senza campo correlato è possibile?

    L'inserimento del "cliente fantasma" è del tutto superfluo e rischia di avere ripercussioni in tutto il progetto: qualunque elaborazione dovrà essere fatta massivamente sui clienti, dovrà escludere forzatamente il cliente fantasma, così come dovrà esserne impedita la visualizzazione, la modifica, la rimozione, ecc.

    Oltre a questo, non servirebbe a nulla in quanto, come ha detto giustamente PiGi78, è sufficiente prevedere che il campo di associazione al cliente (es. ClienteID) sia NULL per indicare che una azione non è associata ad alcun cliente, che senz'altro è una soluzione migliore (per tutti i motivi già citati sopra) per implementare in modo naturale la relazione richiesta.

    Ciao!
  • Re: Integrità referenziale senza campo correlato è possibile?

    Ho avuto dei fastidi ad introdurre di proposito dei 'null' in una struttura retta da integrità referenziale. Soprattutto nello sviluppo del codice saltano fuori delle circostanze inaspettate. Mi è risultato più semplice introdurre un elemento fittizio che comunque potrò isolare nell'SQL. Sostituire la Query 'Klienti' con "ragione sociale <>'fantasma' ...
    Comunque ci sono tanti modi di spellare un gatto.
  • Re: Integrità referenziale senza campo correlato è possibile?

    OlMose ha scritto:


    Ho avuto dei fastidi ad introdurre di proposito dei 'null' in una struttura retta da integrità referenziale.
    La soluzione di per sé non da fastidi: se li hai avuti, hai fatto probabilmente un uso improprio dello strumento.
    Non si tratta di una casistica astrusa, ma perfettamente lecita in un contesto relazionale.

    OlMose ha scritto:


    Comunque ci sono tanti modi di spellare un gatto.
    Esatto: ci sono i modi corretti, e gli escamotage.
    Io preferisco il modo corretto.

    Ciao!
  • Re: Integrità referenziale senza campo correlato è possibile?

    Anch'io
    Né tampoco continuero questa botta-risposta!
Devi accedere o registrarti per scrivere nel forum
8 risposte