Autore Topic: Sviluppo Gestionale Rubinetto Felice  (Letto 15342 volte)

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #45 il: 18 Novembre 2015, 07:23:08 »
Ciao, sono in dubbio sul mettere il prefisso della tabella prima del nome del campo.
Se lo stesso campo, presente su due tabelle diverse, ha una chiave esterna, la chiave esterna come la imposti?
E poi, vuoi veramente usare le chiavi esterne? Perché non affidare al programma il controllo sull'immissione dei dati, tanto l'utente finale non credo che effettuerà mai dei lavori direttamente in sql sul db, ma lavorera solo tramite il gestionale.

Ritornando al discorso delle sequenze, valuta l'idea di utilizzare delle tabelle dove scrivere l'ultimo numero utilizzato, magari abinandolo all'anno.
Sul gestionale su cui lavoro, molti progressivi (fatture, bolle, registri iva, ecc.), sono insertiti in tabelle dove trovi il campo anno, il codice protocollo, e l'ultimo numero utilizzato.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #46 il: 18 Novembre 2015, 11:43:11 »
Ciao, sono in dubbio sul mettere il prefisso della tabella prima del nome del campo.
Se lo stesso campo, presente su due tabelle diverse, ha una chiave esterna, la chiave esterna come la imposti?
E poi, vuoi veramente usare le chiavi esterne? Perché non affidare al programma il controllo sull'immissione dei dati, tanto l'utente finale non credo che effettuerà mai dei lavori direttamente in sql sul db, ma lavorera solo tramite il gestionale.
Ciao Berserker79,
scusami ma non capisco ad una chiave esterna (FK) corrisponde una chiave primaria (PK).
La chiave primaria è un campo particolare che da solo o in combinazione con altri campi rende univoco il record.
Le chiavi sono a livello di tabella non di campo, vale a dire non esiste un campo che autonomamente ha una chiave primaria e/o esterna.
Le chiavi esterne garantiscono in modo certo al 100% (del limite umano) l'integrità referenziale.
Per tanto che noi si possa essere capaci, attraverso il nostro codice, mai potremmo garantire lo stesso grado di certezza.
Se si nasconderà un baco nel nostro codice l'uso delle FK ci permetterà di scovarlo e comunque impedirà di compromettere i nostri dati.
La chiave esterna sarà facilmente identificabile dal prefisso differente rispetto agli altri campi “primari” della tabella.
Comprendo benissimo di essere quello che ha meno esperienza di tutti, e l'aver pretese di creare un database “perfetto” ti potrà far sorridere o peggio, ma credimi o si parte col piede giusto oppure la marcia va a farsi benedire.
Se ben mi ricordo si parte col piede sinistro :)

Citazione
Ritornando al discorso delle sequenze, valuta l'idea di utilizzare delle tabelle dove scrivere l'ultimo numero utilizzato, magari abinandolo all'anno.
Sul gestionale su cui lavoro, molti progressivi (fatture, bolle, registri iva, ecc.), sono insertiti in tabelle dove trovi il campo anno, il codice protocollo, e l'ultimo numero utilizzato.

Non fraintendere lo studio di PostgreSQL col gestionale.
In questo momento io sto cercando di capire come funziona PostgreSQL per sommi capi tanto da poter poi proporre qualcosa e capire almeno in parte quello che ci risponderà Sotema.

Spero siate d'accordo entrambi che ci conviene discutere un problema per volta, se non vi dispiace e se non lo avete già fatto, proporrei di creare sui vostri desktop una cartella Gestionale Rubinetto Felice.
In questa cartella andremo a mettere tutto quello che ci viene in mente per poi sottoporlo al momento opportuno e cioè quando affronteremo il particolare argomento.
Badate non è una critica, serve solo a evitarci di disperdere buone idee col rischio di smarrirle.

Concluso questo aspetto passeremo poi a definire tutte le voci dei dati che dovremo immagazzinare nelle nostre tabelle.
Come detto ho già raccolto un po di voci, ma specialmente sul lato contabilità di cui nulla so penso di essere carente, se tu te ne capisci manda quello che hai.
Evitiamo di postare “dati sensibili” sono sufficienti le voci e una piccola spiegazione se è il caso.
Penseremo in seguito come raggruppare queste voci in relazioni, per ora è sufficiente capire quali dati occorrerà in seguito manipolare per ottenere le informazioni utili al business dell'azienda.
Grazie
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #47 il: 18 Novembre 2015, 11:54:50 »
Ciao Berserker79,
rimanendo nel campo studio di PostgreSQL ti devo proprio ringraziare perché a volte mi concentro su un solo aspetto senza guardare all'insieme.
Ad esempio come tu hai suggerito poco fa se abbini un campo data ad una sequenza a ciclo otterrai una chiave primaria composita infinita.
Grazie, anche le cose più semplici per me sono difficili da capire  :rolleyes:

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #48 il: 18 Novembre 2015, 19:24:03 »
Ciao Gianluigi, ci tengo a precisare che rispetto il tuo impegno nel voler realizzare un db come si deve e che non mi permetterei mai di deridere il tuo lavoro.

Il mio dubbio sulle chiavi esterne nasce dal fatto che sia sul db del gestionale che sul db della BI, non ne usiamo.
Pensiamoci bene, per garantire l'integrità dei dati, come vuoi gestire le chiavi esterne, vuoi creare una chiave esterna per tutti i campi attributo di una tabella?
Oppuere vuoi crearla solo per alcuni campi o solo per alcune tabelle?

Io non le ho mai usate, ma ritengo richiedano un maggiore impegno e tempo da dedicare alla realizzazione del db.
Ma anche con le chievi esterne, sul gestionale dovrai comunque attivare i controlli sull'immissione da parte del personale.
Quindi, perchè non dirottare tutto il controllo sul gestionale?
Io sul db, metterei solo il vincolo affinche i campi non possano assumere valori null.

In questi giorni vedo di recuperare del materiale sulle tabelle della contabilità e le posto.
Ciao.

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #49 il: 18 Novembre 2015, 21:37:46 »
Ciao Gianluigi,
vedo che ti stai impegnando molto nello studio di PostgreSQL. Bravo.
Ho seguito lo scambio tra te e Berseker79 e devo dire che sono d'accordo con entrambi. Dal punto di vista dello studio fai benissimo ad approfondire la conoscenza di PostgrSQL, un database sofisticato e potente, quindi complicato.
Riguardo l'uso delle chiavi esterne vorrei precisare che il loro scopo principale è quello di garantire che non vengano immessi valori non congrui in un determinato campo; ad esempio nella tabella ordini il valore di cliente_id deve obbligatoriamente esistere nella tabella clienti. in caso contrario PostgreSQL impedirà l'immissione del record. Ma se l'immissione dati viene effettuata tramite un applicativo (non da sql) tale verifica la puoi fare molto semplicemente popolando una combobox con tutti i clienti attivi, rendendo inutile la FK. In alternativa dovresti gestire l'eventuale messaggio di errore, cosa assai più complicata.
Anche riguardo le sequenze, nella progettazione di un gestionale, spesso conviene la soluzione proposta da Berseker79, una tabella contenente l'ultimo progressivo ti semplifica di molto il lavoro; non pensare mai di utilizzare una sequenza, ad esempio, per il progressivo di una fattura. Ad ogni cambio anno dovrai reinizializzare la sequenza, tieni presente che il progressivo della sequenza viene incrementato solo al momento dell'immissione del record.
Rimane il fatto che conoscere la materia che si tratta è fondamentale.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #50 il: 19 Novembre 2015, 00:52:14 »
Va bene dovrò mettere delle penali per chi devia dal solco tracciato.   :P
Vi vedo molto ma molto indisciplinati, stiamo decidendo o almeno dovremmo decidere della nomenclatura da usare e invece parliamo di tutto tranne che di quello.
Se andremo avanti così ho paura che manco partiamo con questo benedetto gestionale.  >:(
Comunque visto che oramai abbiamo iniziato...
Parto dalla cosa più semplice lo studio di PostgreSQL: Io non ho detto che useremo le sequenze nel gestionale ne che le useremo col ciclo e la data, ho solo ringraziato Berserker79 per avermi illuminato su una sua possibile applicazione avendo citato l'anno inserito nella chiave primaria, tutto li e ho anche specificato che parlavo di studio e non di gestionale, vi prego di non fare confusione fra studio e gestionale.
Riguardo l'uso delle chiavi esterne vorrei precisare che il loro scopo principale è quello di garantire che non vengano immessi valori non congrui in un determinato campo; ad esempio nella tabella ordini il valore di cliente_id deve obbligatoriamente esistere nella tabella clienti. in caso contrario PostgreSQL impedirà l'immissione del record. Ma se l'immissione dati viene effettuata tramite un applicativo (non da sql) tale verifica la puoi fare molto semplicemente popolando una combobox con tutti i clienti attivi, rendendo inutile la FK. In alternativa dovresti gestire l'eventuale messaggio di errore, cosa assai più complicata.

È chiaro che noi utilizzeremo Gambas per immettere e/o eliminare dati nel database ma non vedo nessunissima complicazione a implementare la sicurezza. Del resto i database danno semplici strumenti per farlo. Oltre a non essere particolarmente complicato ci obbliga a fare le cose correttamente e ci garantisce da eventuali errori.
Io non capisco questa riluttanza da parte vostra, a fronte di un po di codice in più avremo garantiti i dati, ripeto garantiti i dati che sono l'unica cosa veramente importante, la cosa che conta.
Vi rammento che basta una svista un errore logico per inquinarli e poi la frittata è servita.
Non garantire le tabelle, i campi, le relazioni ecc. è il modo migliore per ottenere un database di EMME.   :-[
Voi dovrete essere pazienti con me, molto pazienti perché vi dovrete liberare dai fardelli che vi impongono le aziende che vogliono un database “che funzioni veloce” anche con l'hardware scadente dei clienti.
Se la corretta via prevede tre campi dove altri ne utilizzano solo uno, una vista più elaborata e complicata perché non abbiamo potuto ridondare dati in altre tabelle in modo da non avere problemi di coerenza o una tabella in più per non avere campi vuoti in un'altra e magari il database cammina più lento, vorrà dire che chi lo vorrà usare si comprerà l'hardware adeguato ad un ottimo prodotto.  ;D
So benissimo di avere una bella pretesa, una faccia di tolla, voler adeguare a me che non so, voialtri che sapete invece di essere io ad adattarmi, però credetemi se avrete la certosina pazienza di seguirmi nel folle camino non vi pentirete.
La mia ignoranza mi rende immune da scorie.
E poi scusate fatevi questa domanda, che gusto c'è a fare qualcosa nel modo che già conosco?

Cari Berserker79 e Sotema spero tanto comprendiate lo spirito amichevole di quanto vi scrivo e l'ammirazione che ho per voi (che estendo anche a Tornu sperando tenga fede al suo nome) e che possiate pertanto riuscire a sopportare i miei soprusi.  :-*
Berserker79 mi sono dimenticato di comprenderti fra le persone che hanno una speciale licenza di critica insieme a Tornu e Sotema, se ti va puoi anche sorridere si me che lo accetto volentieri perché so non essere di derisione o almeno lo spero  :D
Per BI intendi business intelligence? Caspita se lavori in un'azienda all'avanguardia!  :ok:

E ora fate i bravi bambini e ditemi cosa ne pensate della nomenclatura, vi va bene? Manca qualcosa?

 :ciao:

PS: Sotema quando parli di combobox ti riferisci mica allo speciale widget creato da Milio?
« Ultima modifica: 19 Novembre 2015, 00:59:16 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #51 il: 19 Novembre 2015, 21:09:28 »
Ciao Gianlugi, per il discorso della nomenclatura, per me va bene quanto proposto da te, anche se io solitamente scrivo tutto in maiuscolo.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #52 il: 19 Novembre 2015, 23:24:27 »
Mi sto domandando come reagirei io a quanto da me scritto nel precedente post se fossi al posto di uno di voi due.
Probabilmente proverei un po di risentimento pensando “guarda un po questo bel tipo, gli metto a disposizione la mia esperienza e lui pretende di saperne più di me e mi sta pure a sfottere facendo il finto modesto, non rendendosi conto delle cavolate (direi cavolate? Davvero?) astronomiche che spara come verità fondamentali”. Penserei seriamente di lasciarlo andare al suo destino e abbandonare il progetto.
Sono contento che al vostro posto ci siate voi.  :D
In effetti quello che ho scritto non mi piace, non che non dica quello che penso anzi, ma è mal esposto, insomma non è facile spiegare bene cosa vorrei riuscire a fare.
Il punto è, come già ho avuto modo di dire, che occorrerebbe semplicemente saperlo ma io non lo so.
O meglio lo so ma solo in parte, quella iniziale occorrerà che ve la esponga con più dovizia di particolari in modo da evitarci nuove incomprensioni.
Potremo così verificare se l'obiettivo è perseguibile oppure no.
Io non so cosa è effettivamente un gestionale ma ho la presunzione di credere di sapere teoricamente come si progetta un buon database.
La progettazione di un database prescinde il software sia di database che di programmazione.
Credo proprio che durante la progettazione non bisognerebbe mai porsi la domanda “già ma poi questo con Gambas e PosgreSQL come lo metto in pratica?”, trovo che sarebbe un errore.
Per ora non pensiamoci se non come ipotesi di studio come fare questo o quello nella pratica, magari la soluzione viene da se con la buona progettazione.
Io credo questo un database ben progettato poi lo si potrà mettere in pratica con qualunque strumento.
Detto questo entriamo un po più nel particolare e iniziamo a mettere qualche paletto:
Qui vi elenco pochi assiomi, regole che io giudico imprescindibili al buon funzionamento di un database relazionale.

Tabella:
Ha sempre una chiave primaria che ne garantisce l'integrità a livello di record, i suoi campi contengono un unico valore, non contiene campi calcolati, rappresenta un singolo oggetto o evento.
Campo:
È unico in tutto il database, è in relazione con gli altri campi della tabella rappresentandone una caratteristica, contiene un valore unico, vale a dire che tale informazione non può essere suddivisa in parti più piccole, non può contenere un valore calcolato.
Relazione:
L'integrità relazionale è data dalla corretta individuazione delle chiavi primarie e delle chiavi esterne, permette di inserire ed eliminare record senza effetti negativi.
Vista:
Per ottenere tutte le informazioni come i campi calcolati e i dati filtrati da più tabelle.

Naturalmente ci sono le eccezioni, i campi ridondati ma devono essere i meno possibile e solo dove strettamente necessario in quanto comportano una possibile fonte di errore.
È anche vero però che troppi join nuocciono alle query.

Lo so ne abbiamo già discusso e mi avete detto che nei vostri gestionali non è così.
Ciò non toglie che noi inizialmente nella fase progettuale ci atterremo a queste poche e semplici regole che non sono scolpite nella roccia ma sono solo di buonsenso.

È prematuro attualmente che non abbiamo ancora isolato i dati che dovremo raggruppare in relazioni per poter ottenere le informazioni utili al database già discutere di questo, questo per ora è il solco in cui ci muoveremo la stella polare su cui tracceremo la rotta poi al momento opportuno discuteremo e risolveremo.
La cosa è molto semplice al momento opportuno basterà dimostrare che un metodo o sistema è meglio di un altro per quel tale e talaltro motivo.
Non sono la vestale del campo perfetto basta convincermi con valide motivazioni. Ad esempio dirmi “nel mio gestionale non c'è” non è sufficiente.

Se anche a Sotema, Tornu e chiunque altro vorrà partecipare va bene la nomenclatura e la trova sufficiente possiamo passare a raggruppare questi benedetti dati.

Appena ho messo giù un esempio calzante e rappresentativo di quello che intendo lo posto così che possiate partecipare anche voi se vorrete con elenchi di dati o con suggerimenti e critiche costruttive.
La mia idea di questa fase era di tipo colloquiale cioè una immaginaria discussione fra noi e il cliente ma visto che non ha funzionato proviamo così.

Come ho già detto e ripetuto io di contabilità non ne so se qualcuno di voi è ferrato nel campo è pregato di postarne i dati utili e un po di spiegazioni. Tornu aveva proposto di non metterla nel progetto voi cosa ne dite? Io proverei se però ci si rende conto di non poter continuare si è sempre in tempo a fare marcia indietro.

Vi chiedo un po di pazienza proviamo a muoverci così e vediamo se diventiamo più produttivi.
Grazie dell'attenzione, buon lavoro.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #53 il: 20 Novembre 2015, 22:58:56 »
1. I nomi delle tabelle devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo aliquote_iva lo si rovescerà per ottenere un chiaro finale plurale e cioè iva_aliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato.
3. I nomi di campo saranno preceduti dalle prime tre lettere del nome della tabella più il tratto di sottolineatura fatto salvo il punto 2 e cioè fraintendere a quale tabella ci si riferisce.
Si potrebbe aggiungere che se una tabella è composita il prefisso raddoppierà tipo rig_ord_prezzo.
4. Le chiavi primarie inizieranno con le prime tre lettere del nome della tabella fatto salvo il punto 2 e 3 e finiranno con _id.
5. Le chiavi esterne saranno nominate come le loro chiavi di origine.
6. Più in generale direi che che tutti i nomi escluso i comandi SQL vadano scritti minuscolo e separati dallo underscore o trattino basso.
7. Per facilitare la lettura delle QUERY proporrei di scriverle su più righe tipo (scusate la banalità):
    sMioSql = "SELECT *"
    sMioSql &= " FROM clienti"
    sMioSql &= " ORDER BY cli_cognome DESC,"
    sMioSql &= " cli_nome DESC"
    sMioSql &= ";"
Premesso che non ho remore ad applicare la metodologia indicata queste le mie considerazioni.
1. OK
2. OK
3. Di solito non uso prefissi nel nome di campo, preferisco usare gli alias1
4. Non mi piace usare il trattino basso, rallenta la digitazione, solitamente uso idcliente e non id_cliente.
5. Assolutamente d'accordo
6. Vedi punto 3
7. Se vuoi che la sentenza SQL nel codice sia comprensibile dovrai obbligatoriamente attenerti a questo.

1 Gli alias sono un modo per abbreviare la sentenza SQL. Ad esempio invece di scrivere
Codice: [Seleziona]
SELECT prodotti.descrizione, fornitori.ragionesociale FROM prodotti, frornitori ...;
puoi scrivere:
Codice: [Seleziona]
SELECT p.descrizione, f.ragionesociale FROM prodotti as p, fornitori as f ...;
dove p ed f sono gli alias di tabella. In query molto lunghe sono molto utili, indispensabili quanto due o più nomi di campo nella query sono uguali.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #54 il: 21 Novembre 2015, 16:39:00 »

Premesso che non ho remore ad applicare la metodologia indicata queste le mie considerazioni.
1. OK
2. OK
3. Di solito non uso prefissi nel nome di campo, preferisco usare gli alias1
4. Non mi piace usare il trattino basso, rallenta la digitazione, solitamente uso idcliente e non id_cliente.
5. Assolutamente d'accordo
6. Vedi punto 3
7. Se vuoi che la sentenza SQL nel codice sia comprensibile dovrai obbligatoriamente attenerti a questo.

1 Gli alias sono un modo per abbreviare la sentenza SQL. Ad esempio invece di scrivere
Codice: [Seleziona]
SELECT prodotti.descrizione, fornitori.ragionesociale FROM prodotti, frornitori ...;
puoi scrivere:
Codice: [Seleziona]
SELECT p.descrizione, f.ragionesociale FROM prodotti as p, fornitori as f ...;
dove p ed f sono gli alias di tabella. In query molto lunghe sono molto utili, indispensabili quanto due o più nomi di campo nella query sono uguali.

Ciao Sotema,
scusa ma mi scappa da ridere non per quello che scrivi, ci mancherebbe! Ma per la situazione che si è venuta a creare, fino ad ora siamo in quattro che abbiamo detto la nostra sulla nomenclatura  e cane se ce n'è uno che è d'accordo con gli altri.  :rotfl:
Forse ma non sono sicuro Tornu potrebbe avvicinartisi però ama le abbreviazioni tipo piva al posto di partitaiva (o partita_iva).
Berserker79 vorrebbe tutto maiuscolo PARTITA_IVA, io il CamelCase  PartitaIva e se non ho capito male tu semplicemente partitaiva.
Be insomma altrimenti non saremmo italiani.  :D
Ripeto se ho capito bene sei d'accordo su abbreviare i nomi solo dove non ci può essere incomprensione se ad esempio Tornu a cui piacciono le abbreviazioni "spinte" ha voglia e tempo può postare un elenco di abbreviazioni per evitarcele (le incomprensioni).
La chiave primaria scritta idcliente a me va bene anche io non ho remore, solo sono molto paciugone e tendo sempre a confondermi è per quello che metto il prefisso per sapere di chi è il campo io quelle poche volte che ho creato query complicate ho sempre usato gli alias non sapevo che il prefisso me le potesse evitare  :rolleyes:

Ricapitoliamo:
1. I nomi delle tabelle non contengono spazi e devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo aliquoteiva lo si rovescerà per ottenere un chiaro finale plurale e cioè ivaaliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato non possono contenere spazi né lettere accentate es. citta e non città (è ovvio ma è bene dirlo).
3. Le chiavi primarie inizieranno con id tipo idcliente
4. Le chiavi esterne saranno nominate come le loro chiavi di origine.
5. Per facilitare la lettura delle QUERY le scriveremo su più righe tipo:
    sMioSql = "SELECT *"
    sMioSql &= " FROM clienti"
    sMioSql &= " ORDER BY cognome DESC,"
    sMioSql &= " nome DESC"
    sMioSql &= ";"

Caro Berserker79 io e te ci dobbiamo sacrificare e probabilmente un po anche Tornu ma non possiamo proprio inimicarci Sotema che è l'unico che conosce PostgreSQL.   ;D :P

Scherzi a parte visto che dobbiamo dialogare con lui tanto vale farlo come vuole PostgreSQL.
Ci abitueremo meglio a leggerne le risposte.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #55 il: 21 Novembre 2015, 17:47:48 »
Ciao Sotema,
scusa ma mi scappa da ridere non per quello che scrivi, ci mancherebbe! Ma per la situazione che si è venuta a creare, fino ad ora siamo in quattro che abbiamo detto la nostra sulla nomenclatura  e cane se ce n'è uno che è d'accordo con gli altri.  :rotfl:
E fino a qui tutto normale...
Forse ma non sono sicuro Tornu potrebbe avvicinartisi però ama le abbreviazioni tipo piva al posto di partitaiva (o partita_iva).
Berserker79 vorrebbe tutto maiuscolo PARTITA_IVA, io il CamelCase  PartitaIva e se non ho capito male tu semplicemente partitaiva.
Be insomma altrimenti non saremmo italiani.  :D
Almeno in questo caso siamo d'accordi in due, anch'io come Tornu preferisco abbreviare laddove possibile. Gli esempi che ho postato erano solo...esempi.
Per quanto riguarda il tutto maiuscolo apprezzato da Berserker79, purtroppo come hai già scoperto è PostgrSQL stesso che pone dei vincoli e dover scrivere sempre i nome racchiusi tra doppi apici può portare ad errori, oltre che complicare la vita.
Ripeto se ho capito bene sei d'accordo su abbreviare i nomi solo dove non ci può essere incomprensione se ad esempio Tornu a cui piacciono le abbreviazioni "spinte" ha voglia e tempo può postare un elenco di abbreviazioni per evitarcele (le incomprensioni).
La chiave primaria scritta idcliente a me va bene anche io non ho remore, solo sono molto paciugone e tendo sempre a confondermi è per quello che metto il prefisso per sapere di chi è il campo io quelle poche volte che ho creato query complicate ho sempre usato gli alias non sapevo che il prefisso me le potesse evitare  :rolleyes:
Se e appena avrò tempo preparo un elenco di abbreviazioni anch'io, poi sceglieremo tra tutte le proposte.
Ricapitoliamo:
1. I nomi delle tabelle non contengono spazi e devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo aliquoteiva lo si rovescerà per ottenere un chiaro finale plurale e cioè ivaaliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato non possono contenere spazi né lettere accentate es. citta e non città (è ovvio ma è bene dirlo).
3. Le chiavi primarie inizieranno con id tipo idcliente
4. Le chiavi esterne saranno nominate come le loro chiavi di origine.
5. Per facilitare la lettura delle QUERY le scriveremo su più righe tipo:
    sMioSql = "SELECT *"
    sMioSql &= " FROM clienti"
    sMioSql &= " ORDER BY cognome DESC,"
    sMioSql &= " nome DESC"
    sMioSql &= ";"

Caro Berserker79 io e te ci dobbiamo sacrificare e probabilmente un po anche Tornu ma non possiamo proprio inimicarci Sotema che è l'unico che conosce PostgreSQL.   ;D :P

Scherzi a parte visto che dobbiamo dialogare con lui tanto vale farlo come vuole PostgreSQL.
Ci abitueremo meglio a leggerne le risposte.
 :ciao:
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #56 il: 22 Novembre 2015, 09:20:05 »
Forse ma non sono sicuro Tornu potrebbe avvicinartisi però ama le abbreviazioni tipo piva al posto di partitaiva (o partita_iva).
Berserker79 vorrebbe tutto maiuscolo PARTITA_IVA, io il CamelCase  PartitaIva e se non ho capito male tu semplicemente partitaiva.
Be insomma altrimenti non saremmo italiani.  :D
Almeno in questo caso siamo d'accordi in due, anch'io come Tornu preferisco abbreviare laddove possibile. Gli esempi che ho postato erano solo...esempi.
Per quanto riguarda il tutto maiuscolo apprezzato da Berserker79, purtroppo come hai già scoperto è PostgrSQL stesso che pone dei vincoli e dover scrivere sempre i nome racchiusi tra doppi apici può portare ad errori, oltre che complicare la vita.

Non sapevo che postgrsql volesse i campi in maiuscolo racchiusi fra virgolette, quindi inutile discuterne, si vada per il tutto minuscolo.
Anche io sono d'accorso sull'usare le abbrevazioni per tabelle e campi, usando lo stesso nome per un campo che si trova su più tabelle.
Ad esempio, l'ipotetica tabella "clienti" avra il campo "cliente_id" che sarà chiave primaria, mentre la tabella "ordini_clienti" avra sempre il campo "cliente_id" anche se qui non è parte della chiave primaria.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #57 il: 22 Novembre 2015, 12:08:22 »

Anche io sono d'accorso sull'usare le abbrevazioni per tabelle e campi, usando lo stesso nome per un campo che si trova su più tabelle.
Ad esempio, l'ipotetica tabella "clienti" avra il campo "cliente_id" che sarà chiave primaria, mentre la tabella "ordini_clienti" avra sempre il campo "cliente_id" anche se qui non è parte della chiave primaria.

Cioa Berserker79,
e ti pareva! L'unico che non ama le abbreviazioni sono io  :'(
Mi raccomando attieniti all'ultima nomenclatura in cinque punti idcliente, id davanti non più dietro e senza underscore.
 :ciao:

PS: Io comando... ma decide Sotema  ;D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #58 il: 22 Novembre 2015, 12:14:51 »
Come credo sappiamo tutti il modello relazionale di database è stato elaborato nel 1970 dal Dr. Edgard Codd ed è basato su teorie matematiche avanzate.
Io che sono una persona molto ignorante non avrei nessuna chance se mi dovessi basare su dette teorie. Per fare un esempio:
“TERZA FORMA NORMALE: Una tabella è in 3NF se è in 2NF e tutti gli attributi non chiave dipendono funzionalmente solo dalla chiave (eliminazione delle dipendenze funzionali transitive). “
questo enunciato messo così per me ha poco significato e se dovessi studiare la progettazione così lascerei subito perdere.
Fortunatamente o sfortunatamente fate voi, anni fa mi capitò di leggere una traduzione in italiano della Mondadori del libro di Michael Hernandez che tentava di spiegare in base alle sue esperienze la progettazione in modo elementare a patto però che si seguissero certe linee guida.
Questo mi permise a suo tempo di creare qualche piccolo database funzionante.
Naturalmente sostenere che, sulla base di quanto detto, ho la presunzione di sapere progettare un database gestionale sarebbe una vera “smargiassata”.
Però dette linee guida sono l'unico sistema che io conosco e che posso seguire.
Hernandez sostiene che per evitarsi di uscire dai binari occorre per prima cosa chiarirsi bene attraverso un enunciato stringato quali sono gli obiettivi finali del database, a cosa serve?
Dire gestionale è esaustivo? Occorrerà specificare meglio?
Quindi si passa alla fase due: Analisi del database legacy interviste e quant'altro occorra per poter estrapolare tutte le voci utili al database.
Cercherò quindi attraverso il semplice esempio che allego di rappresentarvi questa fase per cercare tutti gli elementi di base per poter costruire le tabelle del nostro gestionale.
Qui prendo in esame solo il documento Offerta inviatoci da Tornu così potete vedere come vorrei procedere e dirmi la vostra.
Se la cosa vi sembra sensata poi si prosegue nell'affinamento fino a raggiungere la base delle tabelle.
Poi si passa alle relazioni, alle regole di business, alle visualizzazioni.
Si ricontrolla il tutto e se ci soddisfa si passa alla progettazione con Gambas.
 :ciao:
PS: Mi sono accorto di essermi molto arrugginito ma è anche vero che io di gestionale nulla so.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Sviluppo Gestionale Rubinetto Felice
« Risposta #59 il: 22 Novembre 2015, 17:00:39 »
Mi raccomando attieniti all'ultima nomenclatura in cinque punti idcliente, id davanti non più dietro e senza underscore.
 :ciao:
PS: Io comando... ma decide Sotema  ;D

Visto che siamo 3 contro 1 vada per cliente_id, sul resto mi pare siamo tutti d'accordo. Quindi si parte.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein