Chiave primaria

di il
5 risposte

Chiave primaria

Ciao a tutti, dalla teoria studiata non riesco a capire delle cose, se io ho due tabelle:

CLIENTE(id, username, password)

PROFILOCLIENTE(idcliente, nome, cognome,email, indirizzo, telefono)


- id è chiave primaria di CLIENTE

- idcliente è chiave esterna con riferimento a id in CLIENTE, il mio dubbio è...Posso dire che idcliente è anche chiave primaria di PROFILOCLIENTE?? è CORRETTO??

Se NO, posso solo dire che idcliente è chiave esterna senza, quindi, mettere una chiave primaria??

Una tabella può non avere chiavi primarie???

Forse, anzi sicuramente, sono domande banali....ma me le sono poste e non so darmi una risposta ...grazie mille a tutti

5 Risposte

  • Re: Chiave primaria

    Prima di tutto,è sempre meglio denominare le chiavi primarie usando lo stesso nome, per cui nella tabella CLIENTI la chiave primaria dovrebbe essere IDCliente (non solo ID).

    Riguardo a PROFILOCLIENTE è possibile utilizzare la stessa chiave primaria IDCliente, ma non potrà essere ovviamente una chiave autoincrementale, dovrà essere valorizzata dal programma.

    Comunque io chiamerei la tabella PROFILI ed userei la chiave primaria IDProfilo, ed imposterei IDCliente come chiave esterna.

    Certo che un tabella può non avere chiavi primarie, ma non c'è alcun vantaggio, mentre vi sono solo vantaggi nell'averne, questo è sempre vero nella norma.
    Però è meglio evitare generalizzazioni, occorre sempre vedere il caso specifico...
  • Re: Chiave primaria

    gibra ha scritto:


    Prima di tutto,è sempre meglio denominare le chiavi primarie usando lo stesso nome, per cui nella tabella CLIENTI la chiave primaria dovrebbe essere IDCliente (non solo ID).

    Riguardo a PROFILOCLIENTE è possibile utilizzare la stessa chiave primaria IDCliente, ma non potrà essere ovviamente una chiave autoincrementale, dovrà essere valorizzata dal programma.

    Comunque io chiamerei la tabella PROFILI ed userei la chiave primaria IDProfilo, ed imposterei IDCliente come chiave esterna.

    Certo che un tabella può non avere chiavi primarie, ma non c'è alcun vantaggio, mentre vi sono solo vantaggi nell'averne, questo è sempre vero nella norma.
    Però è meglio evitare generalizzazioni, occorre sempre vedere il caso specifico...
    ok, tutto molto chiaro, grazie mille per le spiegazioni e per i consigli
  • Re: Chiave primaria

    Se la chiave esterna di una tabella coincide con la sua chiave primaria, e referenzia la chiave primaria di un'altra tabella, vuol dire che hai spezzato una tabella che sarebbe già normalizzata su due tabelle distinte. Nel tuo caso, tutti gli attributi di un cliente potrebbero stare nella tabella cliente perché le loro dipendenze funzionali sono solo con IDCliente.

    Il tuo approccio potrebbe aver senso solo nel caso in cui i dati del profilo non vengono inseriti insieme a username e password oppure se vuoi praticare normalizzazioni particolari (mi pare del 6° tipo) in cui spezzi una tabella normalizzata su più tabelle per organizzare i record a livello fisico in modo tale da rendere più efficienti gli accessi ai dati relativi ad una sola delle 2 sottotabelle.
    Considera comunque che quando dovrai cancellare l'utente dovrai cancellarlo da entrambe le tabelle, così come quando vorrai leggerne tutti i dati dovrai usare una join, per cui non è detto che ti convenga.
  • Re: Chiave primaria

    dvaosta ha scritto:


    Se la chiave esterna di una tabella coincide con la sua chiave primaria, e referenzia la chiave primaria di un'altra tabella, vuol dire che hai spezzato una tabella che sarebbe già normalizzata su due tabelle distinte. Nel tuo caso, tutti gli attributi di un cliente potrebbero stare nella tabella cliente perché le loro dipendenze funzionali sono solo con IDCliente.

    Il tuo approccio potrebbe aver senso solo nel caso in cui i dati del profilo non vengono inseriti insieme a username e password oppure se vuoi praticare normalizzazioni particolari (mi pare del 6° tipo) in cui spezzi una tabella normalizzata su più tabelle per organizzare i record a livello fisico in modo tale da rendere più efficienti gli accessi ai dati relativi ad una sola delle 2 sottotabelle.
    Considera comunque che quando dovrai cancellare l'utente dovrai cancellarlo da entrambe le tabelle, così come quando vorrai leggerne tutti i dati dovrai usare una join, per cui non è detto che ti convenga.
    Sì effettivamente andrebbero unite in un'unica tabella...sto valutando di farlo, ma dovrei cambiare tante cose....

    grazie mille
  • Re: Chiave primaria

    Gibra ti ha già detto tutto. Ritengo che ciò che ti ha confuso le idee parte dal fatto di aver preso in esame un esempio non tipico. Cioè le 2 tabelle non sono in relazione uno-a-molti, bensì uno-a-uno. Ma la relazione uno-a-uno è quasi mai praticata e si preferisce inglobare tutto in una tabella.
Devi accedere o registrarti per scrivere nel forum
5 risposte