Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #22522 > unrolled thread

[OT] MySql/MariaDB e foreign keys

Started by^Bart <gabriele1NOSPAM@hotmail.com>
First post2019-01-26 22:30 +0100
Last post2019-01-27 19:36 +0100
Articles 5 — 3 participants

Back to article view | Back to it.comp.www.php


Contents

  [OT] MySql/MariaDB e foreign keys ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-01-26 22:30 +0100
    Re: [OT] MySql/MariaDB e foreign keys Leonardo Serni <lserni@gmail.com> - 2019-01-27 00:22 +0100
      Re: [OT] MySql/MariaDB e foreign keys ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-01-27 10:55 +0100
    Re: [OT] MySql/MariaDB e foreign keys bramante <bramante@yopmail.com> - 2019-01-27 14:09 +0100
      Re: [OT] MySql/MariaDB e foreign keys ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-01-27 19:36 +0100

#22522 — [OT] MySql/MariaDB e foreign keys

From^Bart <gabriele1NOSPAM@hotmail.com>
Date2019-01-26 22:30 +0100
Subject[OT] MySql/MariaDB e foreign keys
Message-ID<q2ijh6$15o2$1@gioia.aioe.org>
Salve,

sto studiando SQL ed ho un dubbio sulle foreign keys, ipotizziamo di 
avere tre tabelle, una tabella user, una country ed una city:

country
----------
id (Primary key)
country

city
----------
id (Primary key)
city

user
----------
id
name
FK_country
FK_city

Il mio dubbio è il seguente, nella tabella user nello specifico nelle 
due FK bisognerà memorizzare l'id numerico di country e city o bisognerà 
far scrivere direttamente il nome reale della città e della nazione?

Anche perchè nel momento in cui si dovessero richiamare i dati della 
tabella user sarebbe meglio che ci fosse già il nome e non l'id 
altrimenti bisognerebbe fare query su query no?

Forse non dovrei fare primary key l'id ma il nome...

Saluti.
^Bart

[toc] | [next] | [standalone]


#22523

FromLeonardo Serni <lserni@gmail.com>
Date2019-01-27 00:22 +0100
Message-ID<pmqp4etf4g4mnagjev67kge6s06jvv45tk@L.Serni>
In reply to#22522
On Sat, 26 Jan 2019 22:30:16 +0100, ^Bart <gabriele1NOSPAM@hotmail.com> wrote:

>sto studiando SQL ed ho un dubbio sulle foreign keys, ipotizziamo di 
>avere tre tabelle, una tabella user, una country ed una city:
>
>country
>----------
>id (Primary key)
>country
>
>city
>----------
>id (Primary key)
>city

E' possibile che una stessa città sia in più nazioni? Perché se no, ti
conviene mettere l'id della country dentro city. Quella città sarà poi
collegata sempre e solo a una nazione.

>Il mio dubbio è il seguente, nella tabella user nello specifico nelle 
>due FK bisognerà memorizzare l'id numerico di country e city o bisognerà 
>far scrivere direttamente il nome reale della città e della nazione?

L'ID (non è proprio indispensabile, ma IMHO è così tanto meglio che...)

>Anche perchè nel momento in cui si dovessero richiamare i dati della 
>tabella user sarebbe meglio che ci fosse già il nome e non l'id 
>altrimenti bisognerebbe fare query su query no?

In quel caso si fa una JOIN.

	SELECT user.name, city.name, country.name
	FROM user 
	JOIN city ON (users.city_id = city.id)
	JOIN country ON (city.country_id = country.id)

>Forse non dovrei fare primary key l'id ma il nome...

Occupi più spazio, è meno efficiente e ti ritrovi nei casini appena in
quel database dovrai registrare Florence (negli USA ce ne sono 3).

Leonardo
-- 

"You all presumably know why" :-) :-(

[toc] | [prev] | [next] | [standalone]


#22524

From^Bart <gabriele1NOSPAM@hotmail.com>
Date2019-01-27 10:55 +0100
Message-ID<q2jv77$109u$1@gioia.aioe.org>
In reply to#22523
> E' possibile che una stessa città sia in più nazioni? Perché se no, ti
> conviene mettere l'id della country dentro city. Quella città sarà poi
> collegata sempre e solo a una nazione.

Purtropppo potrebbero esserci dei casi di omonimia quindi stesso nome 
della città nella stessa nazione e stesso nome della città anche in 
nazioni diverse quindi pensavo di risolvere nel seguente modo:

city_italy
-----------------
id
nome
provincia
regione

La mia idea è quella di fare una tabella per ogni nazione, dove mi 
interessa avere utenti, contenente tutti i nomi della città di quella 
nazione, in rete ci sono archivi già fatti ed in pochi secondi si 
riuscirebbe a popolarla importando un file *.csv!

> L'ID (non è proprio indispensabile, ma IMHO è così tanto meglio che...)

E' oramai una scuola di pensiero comune! :)

> In quel caso si fa una JOIN.
> 
> 	SELECT user.name, city.name, country.name
> 	FROM user
> 	JOIN city ON (users.city_id = city.id)
> 	JOIN country ON (city.country_id = country.id)

Perfetto! :)

> Occupi più spazio, è meno efficiente e ti ritrovi nei casini appena in
> quel database dovrai registrare Florence (negli USA ce ne sono 3).

Giustissimo!

> Leonardo

Ti ringrazio per la risposta!
Saluti!
^Bart

[toc] | [prev] | [next] | [standalone]


#22525

Frombramante <bramante@yopmail.com>
Date2019-01-27 14:09 +0100
Message-ID<q2kaj2$kgt$1@gioia.aioe.org>
In reply to#22522
Il 26/01/19 22:30, ^Bart ha scritto:
> Salve,
> 
> sto studiando SQL ed ho un dubbio sulle foreign keys, ipotizziamo di 
> avere tre tabelle, una tabella user, una country ed una city:
> 
> country
> ----------
> id (Primary key)
> country
> 
> city
> ----------
> id (Primary key)
> city
> 
> user
> ----------
> id
> name
> FK_country
> FK_city
> 
> Il mio dubbio è il seguente, nella tabella user nello specifico nelle 
> due FK bisognerà memorizzare l'id numerico di country e city o bisognerà 
> far scrivere direttamente il nome reale della città e della nazione?
> 
> Anche perchè nel momento in cui si dovessero richiamare i dati della 
> tabella user sarebbe meglio che ci fosse già il nome e non l'id 
> altrimenti bisognerebbe fare query su query no?
> 
> Forse non dovrei fare primary key l'id ma il nome...
> 
> Saluti.
> ^Bart


usa sempre una chiave, come FK, in questo caso un ID va bene,


rispetto a Serni preferisco le join implicite :)

SELECT a.name
      , b.city
      , c.country
   from user a
      , city b
      , country c
  where a.fk_city = b.b.id
    and a.fk_country = c.id


(anche se a livello di performance in query complesse è meglio le join 
espicite)


ma la vedo difficile trovare un database (se non a pagamento) di tutte 
le città del mondo aggiornate

se ti interessa solo l'italia è facile, se vuoi te lo posso passare 
(regione, citta e provincia)


Saluti

[toc] | [prev] | [next] | [standalone]


#22527

From^Bart <gabriele1NOSPAM@hotmail.com>
Date2019-01-27 19:36 +0100
Message-ID<q2ktnu$1ddd$1@gioia.aioe.org>
In reply to#22525
> ma la vedo difficile trovare un database (se non a pagamento) di tutte 
> le città del mondo aggiornate

Mi sembra di aver notato che alcuni siti attingano da google maps ci 
sarebbe da capire il come riescano a farlo...

> se ti interessa solo l'italia è facile, se vuoi te lo posso passare 
> (regione, citta e provincia)

Se riesci e se vuoi puoi girarmelo alla mail che vedi nel mio profilo!

A rigor di logica come già da me accennato converebbe creare una tabella 
con tutte le città di uno stato piuttosto che una "tabellona" unica con 
tute le città! :D

> Saluti

Saluti!
^Bart

[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.www.php


csiph-web