Compilazione di tabelle in parallelo sulla base di un attributo

di il
16 risposte

Compilazione di tabelle in parallelo sulla base di un attributo

Buonasera,
vorrei creare una maschera di inserimento dati rimandandoli su più tabelle BENI(...) in base alla scelta dell'attributo TIPOLOGIA.
Schematizzando:

Beni
IDBene
Tipologia
Valore

Tipologie
IDTipologia
Tipologia

Località
IDLoc
Toponimo

BeniStabili
IDBene
Località
Specie
Note

BeniMobili
IDBene
Specie
Quantità
Note

BeniTerreni
IDBene
Località
Coltivazione
Note

Relazioni:
Beni.IDBene uno-a-uno BeniStabili.IDBene
Beni.IDBene uno-a-uno BeniMobili.IDBene
Beni.IDBene uno-a-uno BeniTerreni.IDBene
Tipologie.IDTipologia uno-a-molti Beni.Tipologia
Località.IDLoc uno-a-molti BeniStabili.Località
Località.IDLoc uno-a-molti BeniTerreni.Località

Vorrei inserire per ogni bene, in base alla tipologia, i dati nella tabella corrispondente. ES.: voglio inserire i beni 5001 (terreno) e 5002 (mobile). Potrei aprire la tabella BeniTerreni e inserire il bene "05001" con le sue caratteristiche, poi aprire la tabella BeniMobili e inserire il bene "05002" con le sue caratteristiche.

DOMANDA: E' possibile esemplificare l'inserimento dei dati con una maschera, inserendo prima l'ID Bene e la tipologia e poi, in base a quest'ultima, far comparire gli attributi della tabella corrispondente? (con conseguente memorizzazione nella tabella BeniTerreni o BeniMobili sulla base della selezione fatta nella casella "tipologia")? Quale può essere la procedura più corretta da adottare?

Edit: nella normalizzazione delle tabelle creerò le corrispettive SpecieStabili, SpecieMobili e Coltivazioni come già fatto per località.

16 Risposte

  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Qualche cosa in quello che esponi non torna... magari per incomprensione.
    Esempio
    
    Beni
    IDBene
    Tipologia
    Valore
    
    Tipologie
    IDTipologia
    Tipologia
    Tra queste tabelle la ChiaveRelazionale quale sarebbe...? Se è il Campo Tipologia, che immagino sia testo, è errato... e se invece è IdTipologia non si capisce perchè nella Tabella Beni la chiami Tipologia.
    Stessa cosa vale per Località...

    Aggiungo una riflessione... le 3 Tabelle [BeniStabili/BeniMobili/BeniTerreni] sei certo servano...?
    Non è che la sola Tabella [Beni] con il campo Tipologia ne possa già identificare il Tipo e quindi ricondurre la 2FN con una sola tabella...?
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Questo thread sembra essere la continuazione di questo
    https://www.iprogrammatori.it/forum-programmazione/progettazione-database/rimando-una-tabella-specifica-sulla-base-attributo-t39056.html
    Nel precedente thread le tabelle BeniXXX erano state suggerite da me in quanto rilevavo una disomogeneità nei campi. La discussione qui sembra impostata diversamente...ma rilevo confusione in entrambi i casi.
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Si, questo thread è la continuazione di quello, o meglio è la reimpostazione di questa mia domanda nella sezione giusta (Microsoft Access piuttosto che Progettazione Database) come mi hai consigliato tu Osvaldo.

    @Alex ha scritto:


    Tra queste tabelle [Beni / Tipologie] la ChiaveRelazionale quale sarebbe...?
    La chiave relazionale è erroneamente "Tipologia". Dovrei renderla "IDTipologia" (sostituendola nella tabella Beni) ma non so ancora come poter scegliere la tipologia (testuale) da menu a tendina durante la compilazione dei dati e quindi per adesso trovo più pratico questo metodo. Appena capirò come fare utilizzerò il metodo rigoroso; stessa cosa per la località.

    @Alex ha scritto:


    le 3 Tabelle [BeniStabili/BeniMobili/BeniTerreni] sei certo servano...?
    Non è che la sola Tabella [Beni] con il campo Tipologia ne possa già identificare il Tipo e quindi ricondurre la 2FN con una sola tabella...?
    Cosa è la 2FN?
    Le 3 tabelle, come conferma anche Osvaldo, hanno campi non omogenei, motivo per il quale ho ritenuto ragionevole dividerle.
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Gisep ha scritto:


    La chiave relazionale è erroneamente "Tipologia". Dovrei renderla "IDTipologia" (sostituendola nella tabella Beni) ma non so ancora come poter scegliere la tipologia (testuale) da menu a tendina durante la compilazione dei dati e quindi per adesso trovo più pratico questo metodo. Appena capirò come fare utilizzerò il metodo rigoroso; stessa cosa per la località.
    Io ti consiglio di essere "ortodosso" sempre, in modo da avere una linea generale di pensiero "condivisa". Quasi tutti gli utenti preferiscono mettere il campo FK di tipo Numerico equivalente alla PK (Numerazione automatica). Tra l'altro le relazioni tra tabelle di tipo numerico sono sempre più veloci/performanti di quelle di tipo Testo.
    Per risolvere il problema di mostrare il valore testuale si "ottimizza" la casella combinata così

    Gisep ha scritto:


    Cosa è la 2FN?
    Sarebbe la "2a Forma Normale". È un concetto "teorico" della NORMALIZZAZIONE che si basa su alcuni concetti detti appunto "Forme Normali". Io non saprei spiegartele nella TEORIA. Il mio approccio è puramente "fai-da-te" osservando i dati così come si presentano davanti al monitor del computer. Di lì si cerca di eliminare/ottimizzare inutili "ridondanze" e tanto altro ancora. Quello della 2FN è stato esplicitato appunto da @Alex facendoti notare quella (da lui segnalata) "inutile/ipotetica" ridondanza...sulla base dei soli indizi forniti in QUESTA discussione.
    Da parte mia, se nel thread precedente ti ho fornito una risposta/soluzione "affrettata"...non saprei. Ribadisco che osservo confusione in entrambe le discussioni...e la normalizzazione di quello che vorresti fare va sempre implementata a "tutto tondo".
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Gisep ha scritto:


    ....

    @Alex ha scritto:


    Tra queste tabelle [Beni / Tipologie] la ChiaveRelazionale quale sarebbe...?
    La chiave relazionale è erroneamente "Tipologia". Dovrei renderla "IDTipologia" (sostituendola nella tabella Beni) ma non so ancora come poter scegliere la tipologia (testuale) da menu a tendina durante la compilazione dei dati e quindi per adesso trovo più pratico questo metodo. Appena capirò come fare utilizzerò il metodo rigoroso; stessa cosa per la località.
    Le Chiavi Primarie e Chiavi Esterne non hanno un metodo Casuale di assegnazione... devi conoscere la TEORIA PRIMA di iniziare a pasticciare... e non DOPO, altrimenti ti si danno suggerimenti che poi sembrano non coerenti.

    Gisep ha scritto:


    @Alex ha scritto:


    le 3 Tabelle [BeniStabili/BeniMobili/BeniTerreni] sei certo servano...?
    Non è che la sola Tabella [Beni] con il campo Tipologia ne possa già identificare il Tipo e quindi ricondurre la 2FN con una sola tabella...?
    Cosa è la 2FN?
    Le 3 tabelle, come conferma anche Osvaldo, hanno campi non omogenei, motivo per il quale ho ritenuto ragionevole dividerle.
    Non si dividono le Tabelle per questione di CAMPI non OMOGENEI... ma si deve fare un ragionamento più strutturato... conoscendo almeno la teoria di BASE sulle prime 3FN.
    Nel tuo caso, potrebbe essere che nella Tabella si possano inserire tutti i campi necessari, poi per una tipologia usi quelli specifici...

    Non proseguo in quanto credo che prima tu abbia necessità di chiarimenti teorici.
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Grazie!
    Sono riuscito ad ottenere la selezione dal menu a tendina visualizzando la voce testuale al posto del corrispettivo ID numerico. Ottimo!

    Al momento ho (segnate in rosso le modifiche):

    Beni
    IDBene
    IDTipologia
    Valore

    Tipologie
    IDTipologia
    Tipologia

    Località
    IDLoc
    Toponimo

    BeniStabili
    IDBene
    IDLoc
    IDSpecieSta
    Note

    SpecieStabili
    IDSpecieSta
    SpecieSta

    BeniMobili
    IDBene
    IDSpecieMo
    Quantità
    Note

    SpecieMobili
    IDSpecieMo
    SpecieMo

    BeniTerreni
    IDBene
    IDLoc
    Coltivazione
    Note

    Relazioni:
    Beni.IDBene uno-a-uno BeniStabili.IDBene
    Beni.IDBene uno-a-uno BeniMobili.IDBene
    Beni.IDBene uno-a-uno BeniTerreni.IDBene
    Tipologie.IDTipologia uno-a-molti Beni.Tipologia
    Località.IDLoc uno-a-molti BeniStabili.IDLoc
    Località.IDLoc uno-a-molti BeniTerreni.IDLoc
    SpecieStabili.IDSpecieSta uno-a-molti BeniStabili.IDSpecieSta
    SpecieMobili.IDSpecieMo uno-a-molti BeniMobili.IDSpecieMo



    PER ALEX:
    Ho abbastanza chiare le 3 forme di normalizzazione; in quel momento mi sfuggiva l'acronimo, che non sono abituato a leggere.
    Continuo a ritenere necessario suddividere i beni in più tabelle poichè le categorie di beni che possiedo sono in realtà 9 e gli attributi della tabella acorpata "BENI" (che è il mio punto di partenza) sono al momento 24, con alcuni che svolgono funzioni diverse (e che dovrebbero essere sdoppiati).

    La normalizzazione forse mi permetterà di scendere a 15 attributi. A prescindere dal numero di colonne (attributi), avere una matrice semivuota non mi sembra frutto di "3FN" (poi magari mi sbaglio). Naturalmente è una scelta possibile anche quella: si può raggiungere il risultato in molti modi, ciascuno con i suoi pro e i suoi contro.
    Al momento, a prescindere dalla struttura DEFINITIVA del database, la mia scelta è stata quella di dividere le tabelle, e il motivo principale per cui ho aperto il topic è UNO e SPECIFICO: capire se è possibile tramite il filtro di una casella di testo indirizzare la compilazione verso una sottomaschera piuttosto che un'altra.
    Tutti i consigli collaterali, compreso quello sulla possibilità di utilizzare una sola tabella accorpata, mi sono comunque tutti utili e vi ringrazio per questi.
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Secondo me se quelle tre tabelle BeniXXX sono tutte sullo stesso "livello", @Alex ha ragione.
    Però mi pare di capire che alcune "depistano" la logica e più che parlare di Beni si tratta di "qualcosa" che sta DENTRO i Beni. Ad esempio sussiste la relazione BeniStabili uno-a-molti BeniMobili. Ma va anche detto che un TipoBeneMobile può stare in molti BeniStabili...qui per me occorre essere precisi con i nomi campo appropriati.
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    BeniStabili uno-a-molti BeniMobili non esiste come relazione.

    I beni appartengono a 3 categorie complementari:
    Stabili (stabili urbani): casa, frantoio, etc;
    Mobili: oggetti, attrezzi, etc;
    Terreni: campi coltivati o incolti.

    Se un bene è uno stabile urbano (o un terreno) è un bene immobile, perciò non può essere mobile.

    Queste 3 categorie sono quindi parallele e non interagiscono tra loro. Queste tre tabelle BeniXXX sono tutte sullo stesso "livello", perciò da quanto mi sembra di capire è meglio creare diverse maschere (una per tipologia) che filtrano i diversi attributi di una unica tabella BENI.

    A questo punto la domanda diventa: come creare queste maschere?
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Stabili e Terreni sono entrambi Beni (Immobili nel senso che non si muovono). Un campo di discriminazione stabilirà se si tratta di Stabile o Terreno.
    I Mobili (chiamali Oggetti che mi sembra più generico) stanno dentro gli Stabili, quindi Beni uno-a-molti Oggetti. Se tu dovessi riscontrare una RIPETITIVITA' SISTEMATICA di Oggetti che figurano in molti Beni, allora anche Oggetti uno-a-molti Beni. Queste ultime 2 relazioni le espliciti con una TABELLA DI CONGIUNZIONE che chiamerai PosizionamentiOggetti (o CollocazioniOggetti) con i campi:
    IDPosizionamento (PK)
    ...un campo di tipo Data non ci starebbe male...
    IDOggetto (FK)
    IDBene (FK)
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Osvaldo scusami ma non ci stiamo capendo...
    - I beni Mobili (nel senso che non sono immobili) NON hanno una collocazione definita e non devono averla, perciò non hanno relazioni con i beni Stabili.
    - Come scritto nell'altro thread, il database tratta di documentazione storica perciò i dati inseriti non saranno più cambiati/aggiornati e quindi la Data sarebbe ridondante.
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Hai dichiarato tu stesso cosa intendi per "beni mobili"...io preferisco chiamarli Oggetti. Faccio un esempio.
    Nella città di Roma ci sono 5 Beni IMMOBILI: 3 sono case (di Alice, Barbara, Claudio) e 2 sono Terreni (di Dario, Elio).
    In casa di Alice ci sono:
    - televisore
    - frigorifero
    - lavatrice
    - lavastoviglie

    In casa di Barbara ci sono:
    - televisore
    - pianoforte
    - stereo
    - lavatrice

    In casa di Claudio ci sono:
    - televisore
    - computer
    - lavastoviglie
    - aspirapolvere

    Nel terreno di Dario ci sono:
    - rastrello
    - aratro
    - zappa

    Nel terreno di Elio ci sono:
    - zappa
    - sega
    - martello

    Le Case e i Terreni sono BeniImmobili. Televisore, lavatrice,.....aratro, martello… sono Oggetti.
    Come puoi notare un Bene Immobile contiene molti Oggetti.
    Ma anche il televisore o la lavatrice o la zappa possono apparire in molti Beni Immobili.
    Per questo avevo suggerito la relazione BeniImmobili molti-a-molti Oggetti con la tabella di congiunzione.

    Probabilmente a te interessa attribuire anche un VALORE a ogni Bene e/o Oggetto. OK, avrai un campo Valore sia in tabella Beni, sia in tabella congiunzione.
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Ripeto, non mi interessa sapere dove si trovano gli oggetti. Mi interessa sapere a chi appartengono perchè devono essere tassati. NON devo sapere dove si trovano: scrivere "il televisore è in casa di Alice" è ridondante, dunque è un errore.

    Gisep ha scritto:


    - I beni Mobili [...] NON hanno una collocazione definita e non devono averla
    Magari ti sembrerà illogico, ma è una mia necessità!
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Allora tu vuoi un database dove a Persone si assegnano Beni (di qualsiasi genere) ===> La tesi di @Alex è perfetta ===> 1 tabella Beni con un campo di discriminazione (Immobile, Terreno, Mobile o Oggetto).
  • Re: Compilazione di tabelle in parallelo sulla base di un attributo

    Si.. le categorie di beni rimangono parallele, perciò l'ipotesi di lasciare tutto in una tabella è fattibile, se non migliore a questo punto.
    In quest'ottica il mio problema (compilazione di tabelle in parallelo) si traslerebbe all'interno della unica tabella, vertendo quindi sulla compilazione di sottomaschere in parallelo filtrate sulla base di un attributo (tipologia).
    Sto provando a vedere vari tutorial sulla compilazione delle sottomaschere; mi ci vorrà un po' di tempo perchè ancora non sono pratico nell'uso delle maschere, ma credo a questo punto di risolvere così.
    Se potete darmi qualche dritta, anche su tutorial ben fatti, sarebbe per me una gran cosa.
Devi accedere o registrarti per scrivere nel forum
16 risposte