• User

    Consiglio per struttura tabella DB

    Buongiorno a tutti,
    ho un database in cui raccogliere dati di alcuni curriculum vitae... ho strutturato così il database:

                                                                            [CENTER]Tabella
                                                               **|Curriculum_vitae_utente|**
                                                                            Campi
                                                              **|id|nome|cognome|via|ecc....**[/CENTER]
    

    e fino a quì non ci sono problemi. Le "complicazioni" sorgono nel momento in cui si arriva ad inserire le proprie esperienze lavorative, che possono essere più di una. Teoricamente , avrei bisogno di una struttura simile:
    [CENTER]
    Tabella

    |Curriculum_vitae_utente|
    Campi
    |id|nome|cognome|via|ecc....|esperienze lavorative|

    |Esperienza1|
    |da|a|lavoro|datore|ecc...
    |Esperienza2|
    |da|a|lavoro|datore|ecc...
    ** |Esperienza3|**
    |da|a|lavoro|datore|ecc... [/CENTER]

    Praticamente per la tabella "esperienze lavorative" sarebbe necessaria una sotto tabella, che non sono riuscito a creare(e a quanto ho capito non è possibile).

    Al momento ho risolto creando una tabella a parte, solo per le esperienze lavorative,

    [CENTER]Tabella**
    |esperienze lavorative|
    ** Campi
    ** id|email_utente|da|a|lavoro|datore|ecc...
    **
    [/CENTER]
    Con il campo "email_utente" identifico a quale utente appartiene l'esperienza lavorativa, raggruppandole tutte in un unica tabella.

    Ora le mie domande sono due:

    1. E' un metodo troppo rozzo?
    2. Ci sono vie più "raffinate" per raggiungere il mio scopo.

    Grazie a tutti in anticipo per le risposte

    Buona giornata e buona Epifania :gthi:


  • Moderatore

    Ciao Mr.Php, benvenuto anche da parte mia sul ForumGT.

    Quello a due colonne è un approccio corretto, ti suggerisco qualche correzione a partire da semplici considerazioni:

    • il curriculum viene identificato da un id;
    • le esperienze lavorative possono riferirsi al singolo curriculum (e non all'utente > chiamiamo questo Caso 1) oppure all'utente (la struttura del db cambierebbe per seguire una diversa architettura delle informazioni, più flessibile > chiamiamo questo Caso 2);
    • nel Caso 1 tra curriculum ed esperienze lavorative c'è una relazione uno a molti, nel senso che ad ogni curriculum possono corrispondere una, zero o più esperienze lavorative; nel Caso 2 la relazione è invece molti a molti.

    Caso 1
    Si può realizzare con un database a 2 tabelle:

    • tabella *curriculum *con chiave primaria id_curriculum;
    • tabella *esperienze_lavorative *con chiave primaria id_esperienza_lavorativa e campo id_curriculum per la relazione con la tabella curriculum.

    Con questa soluzione hai una tabella per raccogliere i curriculum di tutti gli utenti e una tabella per raccogliere le esperienze lavorative di tutti i curriculum.
    Pro: soluzione semplice e intuitiva per l'utente.
    Contro: soluzione abbastanza rigida.

    Caso 2
    Si può realizzare con un database a 4 tabelle:

    • tabella *utenti *con chiave primaria id_utente;
    • tabella *curriculum *con chiave primaria id_curriculum e campo id_utenti per la relazione con la tabella utenti;
    • tabella esperienze_lavorative con chiave primaria id_esperienza_lavorativa e campo id_utente per la relazione con la tabella utenti;
    • tabella curriculum_ed_esperienze con la coppia (id_curriculum, id_esperienza_lavorativa) come chiave primaria.

    Con questa soluzione:

    • ogni utente può creare zero, uno o più curriculum;
    • ogni utente ha zero, una o più esperienza lavorative;
    • ogni curriculum può contenere zero, una o più esperienze lavorative;
    • ogni esperienza lavorativa è associata a zero, uno o più curriculum.
      Praticamente ciascun utente può creare curriculum diversi nei quali inserisce un sottoinsieme delle proprie esperienze lavorative.
      Pro: soluzione più flessibile.
      Contro: alcuni utenti potrebbero trovare il meccanismo di difficile comprensione, anche se ciò non dipenderebbe direttamente dal db bensì dalla parte front end.

    Spero di esserti stato utile. :smile5:


  • User

    Grazie per la risposta, molto chiara e esauriente. 🙂 Leggendo le varie soluzioni che mi hai proposto, credo che il "caso 1" sia la mia scelta, perchè ogni utente avrà un solo cv (mi so dimenticato di specificarlo nel post di apertura), che potrà aggiornare (aggiungendo, appunto, esperienze lavorative, esperienza formative ecc...).

    Grazie mille :ciauz:


  • Moderatore

    Ottimo, buon lavoro! :smile5: