View Full Version : Dubbio base di dati
Ciao :)
Devo realizzare una cosa simile:
Per ogni parola possibile, devo specificare i vari significati che può avere, con l'elenco dei possibili sinonimi per ciascuno di questi.
Quindi del tipo:
-Cane:
- (Significato 1) - Elenco sinonimi
- (Significato 2) - Elenco sinonimi
- (Significato 3) - Elenco sinonimi
L'elenco dei sinonimi può essere tranquillamente un'unica stringa, quindi sostanzialmente abbiamo una tabella di 3 colonne (keyword, significato, sinonimi)
Però non so bene come una cosa simile si possa realizzare... non ricordo in particolare se con sql si possano associare ad esempio più valori "significato" alla stessa keyword, oppure se si possano inserire diverse triple
(cane, significato1, sinonimi)
(cane, significato2, sinonimi)
Non so se sono stato spiegato :confused:
Grazie :p
franksisca
09-08-2006, 21:33
la chiave in una base di dati è univoca, mentre sql è un linguaggio di interrogazioni alle basi di dati.
fai come chiave la keyword e significato.
Quindi in pratica diti di impostare la coppia keyword-significato come chiave nella tabella?
Cavolo, sono due anni che non tocco queste cose... mi toccherà fare una full immersion anche in questo :muro:
franksisca
11-08-2006, 09:34
la chiava ha lo scopo di rendere univoca in una tabella una determinata riga.
adesso tu puoi risolvere in due problemi, o allarghi la chiave, tipo 2 colonne e non una sola, oppure lasci come colonna la prima, ma in fase di inserimento devi usare qualche "trucchetto", del tipo:
[cane (1), significato, sinonimo]
[cane (2), significato, sinonimo]
[cane (...), significato, sinonimo]
[cane (N), significato, sinonimo]
così la chiave sarà diversa ;)
la chiava
:asd:
ha lo scopo di rendere univoca in una tabella una determinata riga.
adesso tu puoi risolvere in due problemi, o allarghi la chiave, tipo 2 colonne e non una sola, oppure lasci come colonna la prima, ma in fase di inserimento devi usare qualche "trucchetto", del tipo:
[cane (1), significato, sinonimo]
[cane (2), significato, sinonimo]
[cane (...), significato, sinonimo]
[cane (N), significato, sinonimo]
così la chiave sarà diversa ;)
Credo che userò il trucchetto :)
Oppure potrei inseire un'altra colonna:
[cane, 1, significato, sinonimo]
[cane, 2, significato, sinonimo]
usando come chiave le prime 2 colonne, ma forse avrebbe poco senso...
Il.Socio
11-08-2006, 11:09
La buona pratica suggerirebbe la creazione 3 tabelle distinte:
1) Vocaboli: [Vocabolo_ID]
2) Significati: [Significato_ID, xVocabolo_ID]
xVocabolo_ID in relazione con la tabella Vocaboli
3) Sinonimi: [xSinonimo_ID, xSignificato_ID, xVocabolo_ID]
xSignificato_ID, xVocabolo_ID in relazione con la tabella Significati
Inoltre il campo xSinonimo_ID e' relazionato con la tabella Vocaboli...
I campi che ho contrassegnato con _ID partecipano a costituire la chiave della tabella.
La buona pratica suggerirebbe la creazione 3 tabelle distinte:
1) Vocaboli: [Vocabolo_ID]
2) Significati: [Significato_ID, xVocabolo_ID]
xVocabolo_ID in relazione con la tabella Vocaboli
3) Sinonimi: [xSinonimo_ID, xSignificato_ID, xVocabolo_ID]
xSignificato_ID, xVocabolo_ID in relazione con la tabella Significati
Inoltre il campo xSinonimo_ID e' relazionato con la tabella Vocaboli...
I campi che ho contrassegnato con _ID partecipano a costituire la chiave della tabella.
Ma in questo modo non si spreca spazio? Memorizzi più volte la stessa cosa...
Considera che a me tutte quelle informazioni servono sempre: ogni volta che accedo al database mi serve leggere quei 3 campi :confused:
Ma in questo modo non si spreca spazio? Memorizzi più volte la stessa cosa...
Considera che a me tutte quelle informazioni servono sempre: ogni volta che accedo al database mi serve leggere quei 3 campi :confused:
pensa solo alle 2 tabelle vocabolo e significati: vanno fatte.
poi fai delle join per recuperare i dati.
altrimenti come ti comporti con il numero di significati? tutte le parole hanno esattamente 3 significati?
fai una breve ricerca del termine "normalizzazione" riferito ai database.
ti chiarirà tutto
pensa solo alle 2 tabelle vocabolo e significati: vanno fatte.
poi fai delle join per recuperare i dati.
altrimenti come ti comporti con il numero di significati? tutte le parole hanno esattamente 3 significati?
fai una breve ricerca del termine "normalizzazione" riferito ai database.
ti chiarirà tutto
Beh, ad esempio "dog" ha 7 significati diversi: inserisco le tuple
[dog, 1, significato, sinonimi]
[dog, 2, significato, sinonimi]
[dog, 3, significato, sinonimi]
[dog, 4, significato, sinonimi]
[dog, 5, significato, sinonimi]
[dog, 6, significato, sinonimi]
[dog, 7, significato, sinonimi]
"car" ne ha 5
[car, 1, significato, sinonimi]
[car, 2, significato, sinonimi]
[car, 3, significato, sinonimi]
[car, 4, significato, sinonimi]
[car, 5, significato, sinonimi]
E così via...
Poi per leggere i dati, seleziono tutte le tuple che hanno "dog" (o "car") come primo elemento.
Dici che la cosa potrebbe creare problemi?
Beh, ad esempio "dog" ha 7 significati diversi: inserisco le tuple
[dog, 1, significato, sinonimi]
[dog, 2, significato, sinonimi]
[dog, 3, significato, sinonimi]
[dog, 4, significato, sinonimi]
[dog, 5, significato, sinonimi]
[dog, 6, significato, sinonimi]
[dog, 7, significato, sinonimi]
"car" ne ha 5
[car, 1, significato, sinonimi]
[car, 2, significato, sinonimi]
[car, 3, significato, sinonimi]
[car, 4, significato, sinonimi]
[car, 5, significato, sinonimi]
E così via...
Poi per leggere i dati, seleziono tutte le tuple che hanno "dog" (o "car") come primo elemento.
Dici che la cosa potrebbe creare problemi?
così ripeti continuamente "dog". pensa se ripeti 7 volte "precipitevolissimevolmente"
due belle tabelle, un id esterno x collegarle. e luce fu.
così ripeti continuamente "dog". pensa se ripeti 7 volte "precipitevolissimevolmente"
due belle tabelle, un id esterno x collegarle. e luce fu.
stessa cosa con i sinonimi, fai una tabella di collegamento mettendo solo gli id (tanto un sinonimo è una parola con un certo significato) e di sicuro l'hai definito, se no che senso ha?
Il.Socio
11-08-2006, 15:43
Beh, ad esempio "dog" ha 7 significati diversi: inserisco le tuple
[dog, 1, significato, sinonimi]
<CUT>
E così via...
Poi per leggere i dati, seleziono tutte le tuple che hanno "dog" (o "car") come primo elemento.
Dici che la cosa potrebbe creare problemi?
Oltre a tutto quel che ti ha detto matcy, la soluzione che stai proponendo, ti consentirebbe l'inserimento di due tuple che hanno stesso vocabolo e stesso significato, identificativi numerici diversi, e differenti sinonimi.
Cosa che e' concettualmente errata perche' alla coppia vocabolo/significato deve sempre corrispondere un'unico insieme di sinonimi.
Es. pratico, consentirebbe l'inserimento di queste tuple:
dog, 1, animale da compagnia, cane
dog, 2, animale da compagnia, pollo
Generando cosi' una incongruenza nei dati.
La normalizzazione serve appunto per eliminare le ridondanze di dati ed i possibili errori di incongruenza degli stessi...
Dopo che la struttura del db e' stata normalizzata, a seconda del caso specifico e' poi possibile modificare lo schema violando la forma normale con lo scopo di ottenere vantaggi in termini di performance o per questioni di praticita'... Ma sono scelte che dovrebbero essere prese a posteriori, con cognizione di causa e solo in quelle circostanze dove ve ne sia effettivamente una reale necessita'.
Vocaboli:
Significati:
xVocabolo_ID in relazione con la tabella Vocaboli
Sinonimi
vocaboli - significati relazione 1 : 1
vocaboli - sinonimi relazione 1 : n
_____________________________________
Hengler dica una frase per avere una notte
di sesso con un uomo .
- esci con me stasera
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.