Convenzione nomenclatura oggetti

di il
6 risposte

Convenzione nomenclatura oggetti

Buongiorno,
mi sposto di stanza visto che sono nella fase di progettazione DB. Chiedo se esiste una sorta di convenzione o un metodo per dare i nomi ai campi delle tabelle in modo che siano univoci nel DB.
Io ho un articolo scritto da Alex dove spiega i prefissi da utilizzare per i vari oggetti dei DB, per i nomi dei campi pero' non viene specificato nulla, forse per lasciare al progettista piu' liberta' possibile?
Io mi sono dato la seguente regola: ogni tabella a il prefisso Tbl + due lettere maiuscole univoche nel DB + una stringa identificativa del contenuto. All'interno della tabella ogni campo ha un prefisso che identifica il tipo di dati (es.NUM, DES, ID, DATA, FLAG, OP, MEMO, ecc), il nome tabella (es.TblAA, TblAB, ecc) ed il nome del campo. Per cui per esempio: IDtabAAid, oppure MEMOtabFNnote, ecc
Voi che tipo di approccio avete?
Inoltre chiedo: in una tabella con campi FK il nome DEVE essere uguale al nome della PK? Perche' su Microsoft learn ho letto che non e' necessario
Grazie in anticipo

6 Risposte

  • Re: Convenzione nomenclatura oggetti

    Ciao

    Personalmente uso regole molto semplici:
    • Tutti i nomi sono in maiuscolo e, se composti da più parole, divise dall'underscore (ID, NOME, CODICE_POSTALE, ...)
    • I nomi delle tabelle indentificano il tipo di "oggetto" contenuto, al singolare (CLIENTE, ORDINE, FORNITORE, ...)
    • I prefissi li tengo per quello che è diverso da tabella (es: V_ per le viste, UDF_ per le funzioni, UDP_ per le procedure, IX_ per gli indici, ...)
    • Nelle tabelle c'è sempre il campo "ID" che è l'identificativo
    • Il nome dei campi identificano il contenuto (NOME, ETA, PESO, ...)
    • Niente prefissi/suffissi per identificare il "tipo" di campo. Ad oggi tutti gli strumenti fanno già vedere in qualche modo se si tradda di un numero, una stringa, un booleano, ... Inutile metterlo nel nome campo
    • Le foreign-Key (per 1-1 o 1-n) si chiamano col nome della tabella seguito da "ID" poichè puntano al campo ID della tabella riferita. Ad esempio in "ordine" ci sarà il campo "CLIENTE_ID" (ecco perchè il nome delle tabelle lo faccio al singolare )

    Detto questo, se ti serve avere anche il nome del campo univoco all'interno del database (in alcuni casi serve, per esempio sui tool di BI), allora puoi usare come prefisso il nome della tabella. Pertanto tutti i campi della tabella "CLIENTE" avranno il prefisso "CLIENTE" così sai anche da dove viene preso.
  • Re: Convenzione nomenclatura oggetti

    Mailman ha scritto:


    ..Chiedo se esiste una sorta di convenzione o un metodo per dare i nomi ai campi delle tabelle in modo che siano univoci nel DB.
    Beh... non necessariamente i nomi dei campi devono essere univoci. Nel programma che uso (non realizzato da me e non è realizzato in Access) vedo la chiave primaria chiarmarsi quasi sempre progint (ed è una chiave primaria che ha il solo scopo di rendere il record univoco, non ha altri significati).
    Come spesso accade con le convenzioni, usa prima di tutto il buon senso e le regole generali: anche se tecnicamente fattibile, non inserire spazi o caratteri speciali nei nomi. Fa' in modo che diano l'immediata idea del loro contenuto ma non esagerare in lunghezza. Opinione personale: eviterei anche il trattino basso (underscore, sottotratto che dir si voglia). Se può essere utile fai attento uso di maiuscole e minuscole. Come sempre, in tutte le convenzioni, l'importante è la coerenza: se parti seguendo una determinata strada, mantienila (oppure se cambi idea devi cambiare anche quello che hai fatto fino a quel momento, non fare metà e metà). Documenta la tua scelta se la convenzione si discosta dai suggerimenti classici e la struttura delle tabelle dovrà essere vista da altri che metteranno mano al tuo lavoro, magari (o se sei come me perché dopo un tot di tempo non ricordi perché hai chiamato i campi in quel modo e sembrerebbe naturale un altro)
    Non sarei così ligio nell'indicazione del tipo di dato contenuto nella tabella ma anche questa è un gusto personale. Può essere utile in caso di campi di tipo particolare come memo/testo lungo, binary, OLE.

    Mailman ha scritto:


    in una tabella con campi FK il nome DEVE essere uguale al nome della PK? Perche' su Microsoft learn ho letto che non e' necessario
    perché tecnicamente non è vincolante. La relazione la imposti tu "a mano" (o via codice), non viene creata automaticamente da Access solo se vede che i due campi hanno lo stesso nome e tipo compatibile. In una situazione a me ha fatto molto comodo aggiungere alla chiave esterna il suffisso FK, mentre la chiave primaria ha un nome normale (comunque significativo del suo contenuto) per far risaltare immediatamente all'occhio che si tratta, appunto, di una chiave esterna.
  • Re: Convenzione nomenclatura oggetti

    Grazie a tutti per i consigli
    In una situazione a me ha fatto molto comodo aggiungere alla chiave esterna il suffisso FK, mentre la chiave primaria ha un nome normale (comunque significativo del suo contenuto) per far risaltare immediatamente all'occhio che si tratta, appunto, di una chiave esterna
    Io ho adottato una concatenazione di nomi, per es.se la PK e' IDtabAAid, nella tabAB dove diventa FK l'ho chiamata NUMtabABIDtabAAid (ovvero campo numerico della tabella AB che rappresenta l'id della tabella AA).
    Forse un po' macchinoso ma lo considero un po' come una codifica "parlante".
    Allego l'articolo di Alex
    PS Alex per le royalties passo dopo...
    Allegati:
    32128_69e6e1a6c9c2545c3b4d80c4ca088e43.jpg
    32128_69e6e1a6c9c2545c3b4d80c4ca088e43.jpg

    32128_b249b3ad5f6e06561dc222385708ccc8.jpg
    32128_b249b3ad5f6e06561dc222385708ccc8.jpg

    32128_c8e2b8eb8b7764b095fe11a046ecd1b6.jpg
    32128_c8e2b8eb8b7764b095fe11a046ecd1b6.jpg
  • Re: Convenzione nomenclatura oggetti

    Mailman ha scritto:


    ...
    Io ho adottato una concatenazione di nomi, per es.se la PK e' IDtabAAid, nella tabAB dove diventa FK l'ho chiamata NUMtabABIDtabAAid (ovvero campo numerico della tabella AB che rappresenta l'id della tabella AA).
    Forse un po' macchinoso ma lo considero un po' come una codifica "parlante".
    Spero che sia un esempio con nomi di fantasia perché saranno pure parlanti ma parlano una lingua che non capisco.
    Allego l'articolo di Alex
    Dove non si parla mai dei nomi dei campi ma degli oggetti vari del database. Non prendere alla lettera tutto quello che c'è scritto, in particolare, come dicevo prima, il fatto che nel nome debba comparire il datatype del campo. Nella guida di @Alex si parla delle variabili. Per i nomi dei campi (ma lo stesso potrebbe valere per il nome delle variabili) se scrivo Nascita qualcuno dubita che sia una data? (il fesso di turno che vuol fare la battuta dice "è un boolean in cui Vero, è nato, Falso, non è nato). Se scrivo ProvResid che sia una stringa contenente la Provincia di residenza?
    Se scrivo NrOre o Cognome/Denominazione qualcuno dubita sul fatto che il primo sia numerico (poco importa se intero, lungo o altro) e nel secondo caso si tratti di testo?
  • Re: Convenzione nomenclatura oggetti

    Si' Phil, l'esempio e' di fantasia, la logica che c'e' dietro si basa su quanto avevo gia' scritto sopra ovvero:
    tabelle identificabili univocamente da due lettere e campi con il tipo di dato ed il nome quindi nel caso di "NUMtabABIDtabAAid" significa campo numerico della tabella AB collegato al campo di tipo contatore della tabella AA che si chiama id.
    Ho la mente contorta, lo so....
    L'articolo l'ho postato ad uso e consumo di chi fosse interessato
  • Re: Convenzione nomenclatura oggetti

    Le nomenclature sul DB servono principalmente per comodità nel gestire le query e/o capire cosa contenga un campo.

    Quindi, partiamo dal capire quali vantaggi portano le regole che stai seguendo, ovvero:
    • A cosa serve avere i campi coi nomi univoci?
    • A cosa serve identificare una tabella con TabAA quando di fatto il nome tabella è univoco per definizione? Mi sembra tanto una forzatura legata al nome dei campi univoci, dove riporti solo TabAA anzichè il nome completo della tabella (che può essere lungo)
    • A cosa serve avere nel nome il tipo di campo?

    Personalmente posso anche capire i primi due punti qualora serva per forza avere i nomi univoci delle colonne, però l'ultimo lo trovo molto scomodo:
    • Ormai tutti gli editor mostrano il tipo di dato, per cui metterlo nel nome non da molti vantaggi
    • Se domani cambi un tipo di dato, sei obbligato a cambiare tutte le query (pensa alla data di nascita che da campo di tipo DateTime diventa DateOnly, oppure un peso che da intero diventa decimale)
    • Spesso è inutile (vedi esempi di prima: una colonna "descrizione" difficilmente conterrà qualcosa di diverso da testo, una colonna "peso" difficilmente sarà diverso da numerico, una colonna "Percentuale" cosa conterrà se non un numero?)
Devi accedere o registrarti per scrivere nel forum
6 risposte