Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102

    tabelle con attributi dinamici

    salve ragazzi...
    ho un problema che non riesco a risolvere, quindi ho pensato di chiedere un vostro consiglio..

    devo progettare un database che deve essere utilizzato da una applicazione software... il dbms in questione è HSQL.
    il problema è che devo far in modo che per ogni entità di una determinata tabella, la lista dei suoi attributi sia contenuta in una seconda tabella.
    cerco di essere più chiaro;
    il sistema può decidere ad esempio che ad ogni "Studente" vengano associati dei valori quali "nome" o "cognome"... ma deve avere successivamente la possibilità di volerne aggiungere qualcuno... o di eliminarne altri.

    la mia idea iniziale era quella di lavorare con 3 tabelle, definite così (seguo l'esempio su studenti)...

    tab Studenti ( idStudente )
    tab Attributi (idAttributo, NomeAttrib )
    tab Valori (idStudente, idAttrib, valore)

    in questo modo è facile ottenere l'IdStudente che ha 'piero' come valore dell'attrib di nome 'Nome'

    ma come si fa ad ottenere gli IdStudente che hanno come valore 'roma' all'attrib di nome 'Città' e contemporaneamente il valore 'SI' all'attrib di nome 'Fuorisede' ???

    ....considerando il fatto che la ricerca può essere fatta anche su più di 3 / 4 attrib per volta diventa complicato...

    c'è per caso un'altra strategia che potrei utilizzare?

    sono un po' in panne...
    grazie per l'aiuto

  2. #2
    nella WHERE puoi usare la clausola AND , lo sai...

  3. #3
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102
    si lo so...
    ma so anche che in questo caso non andrebbe bene!

    es ...
    mi serve lo studente che ha 34 all'attrib "matricola"

    codice:
    select 
       s.idStudente
    from
       studente s, attributi a, valori v
    where
        v.idStudente = s.idStudente      AND
        v.idAttrib   = a.idAttrib              AND
        a.nome = 'matricola'                 AND
        v.value = '34'
    in questo caso nulla da dire... va bene...
    ma se io volessi sapere lo studente che ha matricola = 33 e cognome = 'rossi' ????

    intenderesti far cosi?
    codice:
    select 
       s.idStudente
    from
       studente s, attributi a, valori v
    where
        v.idStudente = s.idStudente      AND
        v.idAttrib   = a.idAttrib              AND
        a.nome = 'matricola'                 AND
        v.value = '34'                           AND
        a.nome = 'cognome'                 AND
        v.value = 'rossi'
    ... mi sa mi sa che non va bene

  4. #4
    perché non usi una JOIN normale?

  5. #5
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102
    perchè ottimizzare un join su più tabelle è meno prestante che imporre condizioni di uguaglianza tra chiavi esterne

  6. #6
    Originariamente inviato da Pierock
    perchè ottimizzare un join su più tabelle è meno prestante che imporre condizioni di uguaglianza tra chiavi esterne
    sicuro? lo dici dati alla mano? hai dei benchmark a sostegno? sarei interessato, lo dico senza ironia

  7. #7
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102
    dati alla mano ora come ora nn ne ho...
    magari cercherò conferme... o smentite...
    ma nel frattempo... avresti dritte per il mio problema?

  8. #8
    ti ho già risposto fa' una JOIN normale e aggiungi le tue WHERE

  9. #9
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102
    io invece ho risposto che in realtà la tua soluzione nn va bene !

  10. #10
    l'hai provata? hai detto che non è prestante (ma lo supponi, non puoi dimostrarlo), non che sia scorretta...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.