Pare che non sia l'unico folle a studiare i propri codici al pc durante un sabato pomeriggio di fine agosto...
Parlando di cose serie, avrei tre quesiti in merito al database della mia applicazione, che sto perfezionando in modo maniacale. Vi ringrazio in anticipo per l'attenzione ed il tempo che eventualmente vorrete dedicarmi. Premetto che non voglio sapere tecniche per scrivere codici, o soluzioni a problemi, ma semplicemente la migliore alternativa in assoluto, anche dal punto di vista dell'eleganza del progetto, quindi vorrei risposte solo dai programmatori di "vecchia maniera", quelli per intenderci dai quali potrei imparare a gattonare per i prossimi dieci anni (senza escludere che anche chi è alle prime armi possa insegnarmi di tutto e di più).
1) Ho sentito dire da un collega di Ingegneria che i più grossi software, o quelli che si prevede siano destinati a diventare abbastanza rilevanti per la propria attività, hanno come regola formale quella di avere nomi di tabelle e campi (per classi e variabili già lo sapevo) in inglese. Vi risulta?
2) La mia tabella è nata con una chiave primaria su ID autoincrementale. Perfezionando il mio progetto, in quella tabella ho aggiunto un campo (combinazione data + ora + persona sotto forma di stringa) che non sarà MAI duplicato. Ma così violo una delle regole sulla terza forma normale, ovvero ho una chiave di troppo che non sembra di particolare utilità! Posso eliminare l'ID autoincrementale o è buona norma lasciarlo comunque in ogni tabella anche se una chiave univoca già esiste?
3) Questa è più tosta.
Nel mio software gestione soci, il socio può essere chiamato in causa per diverse ragioni, ad esempio per operazioni_contabili o per agenda_adempimenti. Bene, per tante ragioni (conservazione dati, loro storicizzazione all'epoca dell'inserimento, conservazione relazioni se si elimina il socio e tante altre) ogni volta che il socio viene coinvolto in uno di questi eventi il mio programma "copia" tutti i suoi dati dalla tbl_soci in una apposita table_operazioni_soci o table_agenda_soci così anche se il socio della tbl_soci viene eliminato le operazioni e gli appuntamenti non saranno mai orfani. E' corretto, come sto facendo, creare una table per ogni tipo di evento nel quale il socio può essere coinvolto, o potrei creare una table_soci_secondaria per tutti i soci coinvolti in qualche evento, nella quale i dati del socio saranno copiati ogni volta che il socio farà qualcosa, ovviamente in tal caso aggiungendo un campo che indica per che tipo di evento il socio è stato copiato lì dentro (appuntamento, operazione, ecc)?
O in parole più semplici, è più importante la regola che vorrebbe una tabella per ogni "ambito funzionale" del proprio programma, o quella che non vorrebbe due tabelle con identici campi, sia nel numero che nel tipo?
Grazie tantissimo.