Newsgroup: it.comp.software.database
Titolo: Tipo lista?

Esiste un tipo lista per una colonna?
Ho una tabella Libri che per ogni riga (libro) deve memorizzare una
serie di parole chiave, per es. il libro "Lo sport č il piů bel modo
di essere" avrebbe come chiavi "sport", "modo" e "essere". Dove le
memorizzo queste chiavi (il cui numero peraltro č variabile)? Esiste
un tipo "lista" per le colonne di una tabella? (lavoro in MySQL)
Grazie, ciao.
Massimo

 di essere" avrebbe come chiavi "sport", "modo" e "essere".
uhmmm ritengo tu debba fare delle ricerche di tipo testuale, non esiste
nulla d'implementato nel db che usi? (O in altri "limitrofi"?) xchč
qualunque strada tu scelga di tipo "casalingo" dubito possa toglierti
dai probloemi, anzi!

dai probloemi, anzi!
Forse non mi sono spiegato tanto bene, ma il problema non sono le
chiavi (quelle me le ricavo da me), il problema è dove/come
memorizzarle. Se ho una riga di una tabella che mi rappresenta un
certo libro, dove metto le 4-5 o più chiavi che si riferiscono a quel
libro? Ci vorrebbe un campo di tipo lista da aggiungere alla riga
libro, si può? Altrimenti come si fa, un'associazione 1:n con un'altra
tabella?
Massimo

 Forse non mi sono spiegato tanto bene (...)
si ti eri spiegato bene, io ritengo solo tu stia seguendo la strada
sbagliata.
comunque insistendovi non vedo altro che normalizzare

un tipo "lista" per le colonne di una tabella? (lavoro in MySQL)
Se devi fare un elenco di argomenti da associare ad ogni libro, hai
due strade:
1. usare il tipo SET (sfogliando il manuale MySQL, in particolare la
sezione "Column types", si scoprono tante cosine...! ;);
2. usare una tabella "argomenti" e una tabella che correla i libri e
gli argomenti. Il vantaggio di questo secondo metodo è che se devi
inserire un nuovo argomento, non devi modificare la tabella "libri".
Però non capisco come un libro sullo sport possa essere rubricato
sotto "essere"! Se vuoi semplicemente far sì che un utente, cercando
"essere", trovi tutti i libri che abbiano nel titolo tale parola,
allora stai cannando di brutto:
SELECT * FROM libri WHERE titolo LIKE '%essere%'
Ciao
Matteo

>comunque insistendovi non vedo altro che normalizzare
Perdona la mia poca esperienza con i DB, ma forse non ho capito la tua
risposta. Domandavo se esiste un tipo lista per le colonne di una
tabella, tutto qui. In alternativa, chiedevo quale altra soluzione
adottare.
Grazie, ciao.
Massimo

SELECT * FROM libri WHERE titolo LIKE '%essere%'
Questo se prendessi come chiavi le parole del titolo, ma io voglio
anche avere come chiavi l'argomento di cui parla un libro, es.
"storia", "sport", etc.. cose che devo aggiungere io..
Grazie, ciao.
Massimo

Era un esempio! 
OK, era quello di cui volevo essere certo. A volte, si imboccano
strade complicate per soluzioni semplici!
Ciao
Matteo

Come vedi, la terza tabella congiunge le prime due.
Il punto č che le parole chiave possono essere praticamente infinite,
non avrebbe senso "recensirle" all'interno di un'apposita tabella ed
associarle un id. Infatti dovrei mettere tutto il dizionario della
lingua it dentro a quella tabella per esser sicuro di avere a
disposizione tutte le possibili chiavi che voglio utilizzare per i
libri; ora che mi fai pensare potrei anche agire diversamente, cioč
riempire la tabella mano a mano che vengono utilizzate le chiavi, ma
non so, tu che dici?
Massimo

 un tipo "lista" per le colonne di una tabella? (lavoro in MySQL)
Io creerei una tabella con i possibili argomenti chiave e la userei per
compilare un campo text tramite una combobox.
Una qualsiasi select recupererebbe i record giusti.
Ciao, Angelo.

non so, tu che dici?
Direi che per essere utilizzabili, le parole chiave devono essere in
numero finito.
Se ci può andare dentro qualsiasi cosa, finisce che o per ogni libro
metti un centinaio di possibili parole chiave, oppure la loro funzione
si perde!
Il principio infatti è restituire a una richiesta precisa tutti i
libri che possono parlare di un certo argomento.
Quindi la soluzione è cercare di guidare chi consulta il db tra le
possibili scelte.
Ora, se ad es. l'utente cerca "prestazioni agonistiche" e non lo
trova, proverà con "agonismo".
Ma in caso contrario, tu dovrai garantire che tutti i libri a cui hai
associato "agonismo", abbiano anche "prestazioni", "prestazioni
agonistiche" eccetera eccetera. 
Altrimenti "prestazioni agonistiche" restituirà solo una parte dei
record che il tuo db potrebbe offrire su argomenti analoghi. E a
questo punto, l'indice a che ti serve?
Certamente comunque non puoi a priori determinare il numero delle
parole chiave. La soluzione è che quando ti si presenta la necessità,
ne inserisci di nuove nella tabella. Stando attento sempre a
recuperare retrospettivamente i record inseriti.
Questo dipende anche dalla mole dei record e dalla specializzazione
dei libri che registri.
Se si tratta di 1000 libri di argomenti disparati, la distinzione tra
"Letteratura greca arcaica" e "Letteratura alessandrina" potrebbe
essere eccessiva.
Ma se è una biblioteca dedicata esclusivamente al mondo classico,
certamente questa distinzione è essenziale.
Senza contare che potresti stabilire delle macroaree suddivise in più
ambiti interni.
Insomma, è un casino. (del resto, la catalogazione di una biblioteca è
una delle materie più complesse e dibattute...).
Comunque uno potrebbe anche guardarsi le voci del sistema di
catalogazione Dewey.
Alla pfine, praticamente, uno potrebbe:
- in una prima fase individuare un numero congruo e soddisfacente di
parole chiave, tra le quali si muove agevolmente e che gli servono per
iniziare la schedatura
- via via che procede con la schedatura, integrare l'elenco con nuove
entrate, che si rendessero necessarie.
Ciao
Matteo

Ok, in effetti il problema di coniugare una richiesta di ricerca con
"agonista" rispetto alla mia chiave che magari č simile ma non uguale
("agonistico") non č un problema da poco, quindi passo volentieri ad
un numero di chiavi finito e prefefinito.
Ma la mia intenzione era quella di fare questo:
- una ricerca veloce
- una ricerca avanzata
La seconda č il linea con il discorso della chiavi, mi basta
aggiungere un campo con l'elenco delle chiavi da scegliere.. ma per il
primo sono fregato! E' nato da lě il mio bisogno di chiavi, cioč
vorrei che uno appena entra nel mio sito, senza dover andare a fare
una ricerca avanzata con tutti i campi titolo, autore, bla bla.. abbia
la possibilitŕ di fare una ricerva al volo, mettendo quelle 2-3 parole
che gli vengono in mente e che sono correlate al libro o ai libri che
vuol trovare. Qui sono daccapo, nel senso che ho il problema di
coniugare "agonista" con "agonistico" e tutte le infinite possibili
varianti! Ahhhhhh, che faccio?!?!? :-((
Massimo