Ricerca selezionando più colonne

di il
40 risposte

Ricerca selezionando più colonne

Buongiorno a tutti, sono Licia, ho creato un db per contenere i dati dei profumi, è già attivo da diversi anni e all'interno ho più di 1000 articoli, con 900 essenze.
ho 2 tebelle principali:
- dati (idn, n, naso, marchio, idmarchio, articolo, ml, €, famiglia, idfamiglia,  testa1, testa2, testa3, testa4, testa5, testa6, testa7, testa8, testa9, testa10, cuore1, cuore2, cuore3, cuore4, cuore5, cuore6, cuore7, cuore8, cuore9, cuore10, fondo1, fondo2, fondo3, fondo4, fondo5, fondo6, fondo7, fondo8, fondo9, fondo10.)
- essenze (idessenza, essenze, idtipologia, tipologia)
e 6 secondarie con i soli nomi più un id come chiave primaria:
- n
- naso
- marchi
- famiglie
- articoli
- ml
- €
- tipologie
vorrei poter selezionare un essenza che poi cerchi il/i profumi corrispondente, ma il problema è che le essenze sono suddivise, nella tabella principale dati, in 10 colonne testa, 10 colonne cuore e 10 colonne fondo, quindi da un minimo di 3 ed un massimo di 30 su ogni riga.
sto valutando di creare un campo id per ogni dei 30 campi (fondo cuore testa) che combaci con l'idessenza nella tabella essenza e poi relazionarlo, ma poi avrei sempre il problema di avere un sacco di id su ogni riga.
Avete qualche suggerimento? Grazie mille in anticipo a chiunque mi aiuterà.

40 Risposte

  • Re: Ricerca selezionando più colonne

    Il suggerimento è di normalizzare il DB creando le tabelle e le relazioni necessarie

  • Re: Ricerca selezionando più colonne

    L'essenza come viene identificata?

    Cioè, come mai puoi avere da 3 a 30 colonne?

  • Re: Ricerca selezionando più colonne

    Hm…

    Da quello che ho capito testa, cuore e fondo fanno parte di un unico record che sono sotto la dipendenza di IDN, quindi non è possibile aggiungere un nuovo id univoco per ognuna di essi.

    A meno che ogni record, non crei una essenza univoca che poi sarà usata per più profumi.

    Non hai però detto che hai una tabella con i nomi dei profumi e le essenze che lo compongono.

    La via più semplice è quella di creare una nuova tabella che contenga i profumi, collegata con un'altra tabella dei componente dove associ i relativi IDN delle essenze con il relativo profumo. E queste tabelle le dovresti riempire manualmente usando i dati già presenti come fonti dati da selezionare manualmente per l'immissione. Creando così il profumo e le relative essenze.

    Altre soluzioni, secondo me non sono attuabili, perchè il database non è costruito seguendo le regole di normalizzazione e perchè implicherebbe la realizzazione di un codice che vada a collegare i dati già esistenti, e non è facile realizzarlo.

    Però, vediamo se riceverai altri suggerimenti a cui non ho pensato.

  • Re: Ricerca selezionando più colonne

    Per un db costruito così a mio parere è impossibile dare un consiglio valido. Trasformarlo in normalizzato sarebbe un lavoraccio ma fattibile. Io partirei da lì. A quel punto bastrebbe una semplice query per soddisfare la tua esigenza.

  • Re: Ricerca selezionando più colonne

    18/08/2023 - sihsandrea ha scritto:


    L'essenza come viene identificata?

    Cioè, come mai puoi avere da 3 a 30 colonne?

    L'essenza viene identificata con il suo id nella tabella essenze (idessenza, essenza, idtipologia, tipologia), creata per una casella combinata che filtra da una query per tipologia.

    ma anche nella tabella dati, dove idn è la chiave primaria associata al profumo, l'essenza viene suddivisa in trenta campi, considerando che un profumo ha da 1 a 10 essenze per il campo testa, da 1 a 10 per il campo cuore, da 1 a 10 per il campo fondo. qui attraverso una query raggruppo 3 gruppi da 10 (testa, cuore e fondo) così nella maschera visualizzo e cerco un profumo per n o per marchio o per famiglia e mi compare la descrizione completa compresi i tre campi che raggruppano le essenze.  

  • Re: Ricerca selezionando più colonne

    18/08/2023 - fratac ha scritto:


    Hm…

    Da quello che ho capito testa, cuore e fondo fanno parte di un unico record che sono sotto la dipendenza di IDN, quindi non è possibile aggiungere un nuovo id univoco per ognuna di essi.

    A meno che ogni record, non crei una essenza univoca che poi sarà usata per più profumi.

    Non hai però detto che hai una tabella con i nomi dei profumi e le essenze che lo compongono.

    La via più semplice è quella di creare una nuova tabella che contenga i profumi, collegata con un'altra tabella dei componente dove associ i relativi IDN delle essenze con il relativo profumo. E queste tabelle le dovresti riempire manualmente usando i dati già presenti come fonti dati da selezionare manualmente per l'immissione. Creando così il profumo e le relative essenze.

    Altre soluzioni, secondo me non sono attuabili, perchè il database non è costruito seguendo le regole di normalizzazione e perchè implicherebbe la realizzazione di un codice che vada a collegare i dati già esistenti, e non è facile realizzarlo.

    Però, vediamo se riceverai altri suggerimenti a cui non ho pensato.

    Quindi tenere buona la tabella dati contenente le informazioni ma senza le essenze.
    poi devo portare il campo idn (la chiave primaria della tabella dati) nella nuova tabella (es.essenzeprofumo), compilare la tabella manualmente creando 30 campi id (prendendoli dalla tabella essenze) e 30 campi testo, dove ad ogni idn corrispondano da 3 a 10 id.. ho capito male?

  • Re: Ricerca selezionando più colonne

    18/08/2023 - Antony73 ha scritto:


    Per un db costruito così a mio parere è impossibile dare un consiglio valido. Trasformarlo in normalizzato sarebbe un lavoraccio ma fattibile. Io partirei da lì. A quel punto bastrebbe una semplice query per soddisfare la tua esigenza.

    Ti chiedo scusa per la mia ignoranza, ho una conoscenza medio-bassa, come posso normalizzare il mio db, ad esempio come scorporo la tabella principale? 

  • Re: Ricerca selezionando più colonne

    Non è una cosa che si può spiegare in un forum. È una cosa che devi studiare per conto tuo. Ti dovrei consigliare di comprare un libro, ma già guardando qualche video su YouTube potresti ottenere qualche spunto valido per partire.

  • Re: Ricerca selezionando più colonne

    Intanto non dovrebbe esistere una tabella ‘principale’ e comunque non chiamarla dati che non significa nulla. Dai un nome preciso.

    Poi come prima cosa non duplicare dari che hai già.

    Poi non itilizzare campi uguali nella stessa tabella ma usa una terza tabella dove aggiungi un record per ogni campo, ovvero

    tabPdofumi

    Idprofumo descrizione

    tabEssenze

    IdEssenza descrizione 

    tabProfEss

    IdProfumo idEssenza 

    e così via per ogni tabella accessoria seguendo le regole della normalizzazione che puoi sempre studiare

  • Re: Ricerca selezionando più colonne

    18/08/2023 - snasa ha scritto:


    L'essenza viene identificata con il suo id nella tabella essenze (idessenza, essenza, idtipologia, tipologia), creata per una casella combinata che filtra da una query per tipologia.

    ma anche nella tabella dati, dove idn è la chiave primaria associata al profumo, l'essenza viene suddivisa in trenta campi, considerando che un profumo ha da 1 a 10 essenze per il campo testa, da 1 a 10 per il campo cuore, da 1 a 10 per il campo fondo. qui attraverso una query raggruppo 3 gruppi da 10 (testa, cuore e fondo) così nella maschera visualizzo e cerco un profumo per n o per marchio o per famiglia e mi compare la descrizione completa compresi i tre campi che raggruppano le essenze.  

    Scusa, mi sono espresso male.

    Che valori metti su testa da 1 a 10, su cuore da 1 a 10 e su fondo da 1 a 10?

    Sono ingredienti della composizione dell'essenza?

    Può succedere che “notte tempestosa” abbia testa da 1 a 4 e da 8 a 9 ma non abbia testa da 5 a 7? Tipo: speziato, dolce, agrumato ecc..

    Ecco, la mia domanda è l'essenza di gelsomino, come va identificata? Cosa è testa, cosa cuore e cosa fondo?

    Poi, cosa è €?

    Insomma, cosa sono e ache servono tutti gii altri campi che hai creato?

  • Re: Ricerca selezionando più colonne

    Quindi in realtà la tabella dati, è quella che contiene i profumi?

    Comunque il database  andrebbe rifatto completamente, solo che naturalmente hai già tutti i dati inseriti.

    Secondo me la soluzione è costruire nello stesso database, altre tabelle collegate tra di loro ed usare quelle già presenti come fonte dati per riempire mano a mano le nuove tabelle.

    Creare delle query  su questo database, sarebbe anche possibile, ma ne dovresti fare una per ogni essenza, testa e fondo.

    Però diventerebbe un lavoro immane, confusionario e ripetitivo.

    Sta a te decidere se continuare con quello che hai già realizzato, oppure tentare di costruire un nuovo database seguendo le regole della normalizzazione.

  • Re: Ricerca selezionando più colonne

    18/08/2023 - snasa ha scritto:


    18/08/2023 - Antony73 ha scritto:


    Per un db costruito così a mio parere è impossibile dare un consiglio valido. Trasformarlo in normalizzato sarebbe un lavoraccio ma fattibile. Io partirei da lì. A quel punto bastrebbe una semplice query per soddisfare la tua esigenza.

    Ti chiedo scusa per la mia ignoranza, ho una conoscenza medio-bassa, come posso normalizzare il mio db, ad esempio come scorporo la tabella principale? 

    in teoria questo database non può più essere normalizzato.

  • Re: Ricerca selezionando più colonne

    18/08/2023 - snasa ha scritto:


    Quindi tenere buona la tabella dati contenente le informazioni ma senza le essenze.
    poi devo portare il campo idn (la chiave primaria della tabella dati) nella nuova tabella (es.essenzeprofumo), compilare la tabella manualmente creando 30 campi id (prendendoli dalla tabella essenze) e 30 campi testo, dove ad ogni idn corrispondano da 3 a 10 id.. ho capito male?

    Non è che hai capito male, ma ragioni come se stessi lavorando con excel, dove sei costretta a creare delle celle per ogni essenza.

    I database hanno una logica diversa. Ogni tabella deve contenere per prima cosa, solo una categoria di dati appartenente ad un gruppo.

    E se un profumo è composto da più di una essenza, non c'è bisogno che crei un campo per ogni essenza, si attua una procedura diversa.

    Si creano due tabelle. Collegate tra di loro con delle relazioni uno a molti, dove nella prima ci sarà il nome del profumo, nell'altra tutti i record con le essenze che compongono il profumo.

    Quindi nella prima tabella avrai tutta l'anagrafica del profumo, ad esempio:

    ID_profumo
    Nome_profumo
    Valore_commerciale

    nella seconda tabella avrai

    ID_Essenze
    Nome_essenza
    ID_profumi

    Collegando con una relazione ID_Profumo e ID_profumi nel momento che andrai ad immettere un nuovo profumo:

    Nella prima tabella verrà creato un record con il nome del profumo e nella seconda tabella potrai creare mille mila record contenenti le essenze, senza andare a creare un campo per ogni essenza. 
    Quindi ad ogni record nella tabella profumo, avrai più record corrispondenti nella tabella essenze, collegati con i numeri ID


    Se crei due tabelle, crei la relazione e poi selezioni la tabella dei profumi e usi “Crea maschera” capirai subito come funzionano i database.

  • Re: Ricerca selezionando più colonne

    18/08/2023 - Antony73 ha scritto:


    Non è una cosa che si può spiegare in un forum. È una cosa che devi studiare per conto tuo. Ti dovrei consigliare di comprare un libro, ma già guardando qualche video su YouTube potresti ottenere qualche spunto valido per partire.

    Bene ora cerco di documentarmi il più possibile sulla normalizzazione.

Devi accedere o registrarti per scrivere nel forum
40 risposte