Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Memorizzare nella tabella utenti solo la città o anche regione e nazione?

4 views
Skip to first unread message

^Bart

unread,
Jul 5, 2021, 2:06:11 PM7/5/21
to
Salve,

vorrei memorizzare nella tabella utenti solo la città a cui arriverei
tramite un wizard perché ho altre tabelle che dividono continenti,
nazioni, regioni etc.

Morale della favola se ho un utente la cui città è Milano e dovessi poi
filtrare chi abita in Lombardia sarebbe un bagno di sangue di query
dover andare "all'indietro" giusto?

Meglio memorizzare anche nazione e regione oltre alla città?

Saluti.
^Bart

bramante

unread,
Jul 5, 2021, 6:29:52 PM7/5/21
to
Il 05/07/21 20:06, ^Bart ha scritto:
nella tabella utenti solo
- id_user
- user
- pass
- email
- flag attivo o date di inizio / fine validità


il resto nella anagrafica

anche perchè se un utente cambia città, storicizzi la tabella anagrafica
ma non cambi la tabella utenti

^Bart

unread,
Jul 6, 2021, 3:04:53 AM7/6/21
to
> nella tabella utenti solo
> - id_user
> - user
> - pass
> - email
> - flag attivo o date di inizio / fine validità
>
>
> il resto nella anagrafica
>
> anche perchè se un utente cambia città, storicizzi la tabella anagrafica
> ma non cambi la tabella utenti

Ti ringrazio per la "dritta"! :)

Saluti!
^Bart

^Bart

unread,
Jul 6, 2021, 3:07:21 AM7/6/21
to
> il resto nella anagrafica
>
> anche perchè se un utente cambia città, storicizzi la tabella anagrafica
> ma non cambi la tabella utenti

Ma in un'ottica di ricerca conviene oltre alla città inserire anche,
regione, nazione, nazionalità, etc. senza dover ricavare quei dati
facendo il percorso a ritroso dalla città?

Già che si parte con un wizard imho conviene che passo passo quei dati
vengano memorizzati da qualche parte...

Saluti.
^Bart

bramante

unread,
Jul 8, 2021, 5:15:23 PM7/8/21
to
Il 06/07/21 09:07, ^Bart ha scritto:
in un ottica di puro DBA i dati non devono essere MAI duplicati, devi
cercare di normalizzare il più possibile.

per farti un esempio
il dato "data nascita" deve essere presente SOLO e SOLTANTO in una tabella.
tutto il resto deve essere referenziato alla tabella che lo contiene



REGIONE
id_regione
regione
...
...

COMUNE
id_comune
Comune
sigla
cap
data_inizio
data_fine
id_regione


utente
id_user
user
pass
...
...


anagrafica_utente
id_user
nome
cognome
sesso
data_nascita
...
id_comune
id_regione (teoricamente potrebbe essere omesso, ci si arriva dal comune)
id_nazione
....

pensa a quanto è sbagliata una situazione del genere se dovessi
duplicare i dati

contratto_bolletta
id_user
nome
cognome
data_nascita
id_comune
id_regione
num_contratto


fattura_bolletta
id_bolletta
num_contratto
....
...


in questo esempio avresti i dati anagrafici (nome, cognome,
data_nascita, id_comune, id_regione) duplicati che potrebbe differire
(ad esempio se l'utente cambia la citta di residenza e aggiorni solo
l'anagrafica e non il contratto) e in una richiesta di estrazione "tutti
gli utenti residenti nel lazio che hanno un contratto" quale dato è
corretto estrarre?


tu indichi a ritroso se parti dall'utente,
select a.nome, a.cognome, a.sesso, ... b.comune, c.regione, d.nazione
from anagrafica_utente a, comune b, regione c, nazione d, user f
where a.id_comune = b.id_comune
and a.id_regione = c.id_regione
and a.id_nazione = d.id_nazione
and a.id_user = f.id_user
and f.user = "PIPPO"

ma se partissi da "estrai tutti gli utenti di milano" non è ritroso.
select a.nome, a.cognome, a.sesso, b.comune, c.regione, d.nazione,f.user
from anagrafica_utente a, comune b, regione c, nazione d, user f
where a.id_comune = b.id_comune
and a.id_regione = c.id_regione
and a.id_nazione = d.id_nazione
and a.id_user = f.id_user
and b.comune = "Milano"


se ti servisse di ricercare il numero di utenti raggruppati per comune
dell'area della lombardia, uomini con un età superiore ai 40 anni.

select count(a.id_user) as num_utenti, comune
from anagrafica_utente a, comune b, regione c
where a.id_comune = b.id_comune
and a.id_regione = c.id_regione
and TIMESTAMPDIFF(YEAR, data_nascita, NOW()) > 40
and sesso = 'M'
group by comune


non esiste il concetto di ricerca al ritroso, esiste il concetto di
estrazione di dati o aggregati.


un ultimo consiglio
inserisci sempre i riferimenti agli "id" e mai alla descrizione
come ho fatto nei miei esempi ho sempre indicato id_comune o id_regione,
MAI la descrizione della stessa.

questo perchè la descrizione è soggetta a cambiamenti.

https://it.wikipedia.org/wiki/Modifiche_territoriali_e_amministrative_dei_comuni_d%27Italia


^Bart

unread,
Jul 10, 2021, 4:46:09 AM7/10/21
to
> in un ottica di puro DBA i dati non devono essere MAI duplicati, devi
> cercare di normalizzare il più possibile.

Giusto.

> per farti un esempio
> il dato "data nascita" deve essere presente SOLO e SOLTANTO in una tabella.
> tutto il resto deve essere referenziato alla tabella che lo contiene

Ok.
>
> utente
> id_user
> user
> pass

Corretta l'idea di tenere una tabella solo per le credenziali di login.

> anagrafica_utente
> id_user
> nome
> cognome
> sesso
> data_nascita
> ...
> id_comune
> id_regione (teoricamente potrebbe essere omesso, ci si arriva dal comune)
> id_nazione

Per ora ho lasciato nazione, regione, provincia e città.

> pensa a quanto è sbagliata una situazione del genere se dovessi
> duplicare i dati
>
> contratto_bolletta
> id_user
> nome
> cognome
> data_nascita
> id_comune
> id_regione
> num_contratto
>
>
> fattura_bolletta
> id_bolletta
> num_contratto

Chiarissimo!

> non esiste il concetto di ricerca al ritroso, esiste il concetto di
> estrazione di dati o aggregati.

Mi sono espresso male! :)

> un ultimo consiglio
> inserisci sempre i riferimenti agli "id" e mai alla descrizione
> come ho fatto nei miei esempi ho sempre indicato id_comune o id_regione,
> MAI la descrizione della stessa.

Hai fatto bene a precisarlo, in questo caso però ero cosciente del tutto! :)

Grazie per tutte le info! :)

Saluti.
^Bart
0 new messages