Entità con un solo attributo

di il
4 risposte

Entità con un solo attributo

Buongiorno.
Problema: a volte ci si ritrova con delle entità che, oltre alla chiave primaria, contengono un solo attributo.
Esempio: tabella farmaco con indicazione della casa farmaceutica. E' meglio mettere due entità (Farmaco e CasaFarmaceutica) con relativa chiave esterna

(IDFarmaco, Nome, PrincipioAttivo, QuantitaPrincipioAttivo, FK_CasaFarmaceutica)
(IDCasa, NomeCasa)

oppure con una combobox su casa farmaceutica?

(IDFarmaco, Nome, PrincipioAttivo, QuantitaPrincipioAttivo, CasaFarmaceutica)

Su alcuni testi ho trovato scritto che non ha senso avere delle entità con un solo attributo (oltre ovviamente alla chiave).

4 Risposte

  • Re: Entità con un solo attributo

    zoro82 ha scritto:


    Problema: a volte ci si ritrova con delle entità che, oltre alla chiave primaria, contengono un solo attributo. [...]
    Su alcuni testi ho trovato scritto che non ha senso avere delle entità con un solo attributo (oltre ovviamente alla chiave).
    Credo che a spostare l'ago della bilancia nella valutazione dipenda poi dall'uso che verrà fatto di quel campo.

    Ad esempio, se la casa farmaceutica non viene inserita manualmente ma deve essere selezionabile da un elenco, ecco che sarà necessario disporre di uno "storage" in cui mettere questo elenco: in questo caso, tanto vale creare la tabella correlata delle case farmaceutiche e usare la chiave esterna per la correlazione.

    Se si prevede inoltre di associare alla casa farmaceutica altri dati in futuro, andando a modificare quindi lo schema, e se non si tratta di un database "schemaless" (es. MongoDB), l'effort di questa variazione in termini di impatto su DB e codice potrebbe essere rilevante: a questo punto, anche per questo caso, meglio creare la tabella.

    Lo stesso dicasi se si intende filtrare spesso per casa farmaceutica: meglio filtrare selezionando una chiave piuttosto che il contenuto del campo.

    Se nessuna delle ipotesi indicate sopra è plausibile, allora direi che è sufficiente aggiungere il campo e magari posticipare l'eventuale creazione di una tabella.

    A dispetto di ciò che viene detto nei testi che hai letto, io non mi pongo generalmente il problema di quanti attributi devo assegnare a una entità, tant'è che a volte creo tabelle tipologiche composte da due campi: la chiave (ID) e un nome/descrizione.

    Questo non è per dire che il testo sia sbagliato, ma credo che - soprattutto in questo ambito - molte regole non possano essere applicate come dogmi, ma è necessario valutare i benefit e i contro in base a quello che si vuole fare e quale soluzione rappresenta il migliore compromesso (trade off) prendendo in considerazione TUTTI gli aspetti.

    Ciao!
  • Re: Entità con un solo attributo

    Sei stato chiarissimo, grazie.

    Anche io ho sempre optato per avere l'entità a parte, non fosse altro che per future estensioni di campi.
    Tuttavia, mi chiedevo se, al momento della query, fare un join fosse più oneroso che scorrere una sola tabella.
  • Re: Entità con un solo attributo

    zoro82 ha scritto:


    Tuttavia, mi chiedevo se, al momento della query, fare un join fosse più oneroso che scorrere una sola tabella.
    Sicuramente l'operazione di JOIN della tabella correlata aggiunge un "costo" rispetto all'avere il campo già nella tabella primaria, però si tratta di un elemento da mettere appunto sulla bilancia vantaggi/svantaggi assieme al resto: se è utile avere una tabella separata, se la correlazione avviene tramite un ID numerico, se i record della tabella secondaria sono relativamente pochi, possiamo considerarlo irrisorio.

    Prendendo l'esempio che hai proposto, quando ci saranno milioni di case farmaceutiche allora ce ne preoccuperemo, fatto salvo che avere quei dati in una tabella correlata costituirà comunque sempre un vantaggio (perché altrimenti vorrebbe dire duplicare milioni di nomi, quindi in ogni caso si avrebbe una situazione non ottimale).

    Ciao!
  • Re: Entità con un solo attributo

    Ciao. Quando butto giù uno schema per un database considero sempre tre fattori.
    La tipologia dei dati, il fattore umano e le prevedibili modifiche ed esigenze future.
    Farmaco e casa farmaceutica sono 2 entità diverse, con caratteristiche proprie, entrambi espandibili, quindi io le posizionerei su due tabelle diverse.
    Il fattore umano ed i possibili errori che possono derivarne sono sempre da tenere al minimo possibile. Ogni digitazione manuale puo causare errori di sintassi, che poi genererebbero errori e mancanze in eventuali ricerche correlate alla casa farmaceutica. Senza considerare che sarebbe una inutile e fastidiosa perdita di tempo stare ogni vota ad inserire per intero la casa farmaceutica.
    Se poi, dopo aver inserito migliaia di farmaci, ci fosse la necessità di modificare il nome della casa farmaceutica, beh, auguri e grazie.
    Con una tabella a parte invece l l'operazione sarebbe di 2 secondi netti, senza incorrere nella corruzione dei dati.
    Se ci fosse l esigenza di modificare o aggiungere campi e funzioni al database, le modifiche non andrebbero ad influire sui dati già archiviati, perché sono già strutturati ed archiviati separatamente.
    Quindi tabelle separate sono, a mio avviso, la via più logica da seguire.
Devi accedere o registrarti per scrivere nel forum
4 risposte