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


Groups > it.comp.www.php > #21962

Re: User che veda uno o più brand

From Alessandro Pellizzari <shuriken@amiran.it>
Newsgroups it.comp.www.php
Subject Re: User che veda uno o più brand
Date 2018-04-07 21:32 +0100
Message-ID <fiso66F9rhqU1@mid.individual.net> (permalink)
References <pab70n$3nm$1@virtdiesel.mng.cu.mi.it>

Show all headers | View raw


On 07/04/18 20:43, GabrieleMax wrote:

> User che può vedere uno o più brand ed ogni brand ha i suoi prodotti 
> memorizzati in product.
> 
> Usando MySQL, INNODB e le FK è facile legare la tabella user alla 
> tabella brand con un rapporto di 1 a 1 ma come potrei fare a legare un 
> user a più brand? 

Ti serve un rapporto n:n, non 1:1 (o 1:n, come nel caso dei prodotti per
brand).

in SQL normalizzato lo puoi fare solo con una tabella intermedia:

create table user (id primary key, ...)
create table brand (id primary key, ...)
create table user_brand (user_id int, brand_id int)

A seconda dei casi potresti denormalizzare il rapporto, e semplicemente
mettere la lista dei brand_id dentro un array (su un DB che li supporta,
tipo PostgreSQL) o encodarli in JSON dentro un campo string nella
tabella user.

Non ci puoi fare le join, naturalmente, ma solitamente non è un problema
perché se l'utente è loggato hai già in memoria una class coi suoi dati,
inclusi i brand deserializzati.

> Per quanto riguarda la tabella product invece basta una sola chiave per 
> legare i prodotti al brand quindi in questo caso il rapporto 1 a 1 va bene.

1:n, che in SQL si esprime "al contrario" (cioè sono i prodotti che
linkano al brand, e non viceversa):

create table product (id primary key, brand_id int references brand(id),
...)

(vado a memoria con la sintassi, ultimamente sto usando troppi DB
diversi... :D)

1:1 significa che hai un solo prodotto per brand, che non ha senso. :)

Il rapporto 1:1 con foreign keys si usa di solito per ottimizzare i dati
sul supporto. Per esempio mettendo in una partizione diversa o su un
engine diverso dati che vengono acceduti meno spesso anche se in realtà
potrebbero stare nella stessa tabella.

Nel caso del brand, per esempio, potresti mettere l'indirizzo o i
contatti in una tabella separata, perché ti servono solo quando
l'amministrazione deve fatturare, e tenere solo nome, id e logo in una
tabella può portare ad avere effettivamente tutta la tabella dei brand
in cache in RAM per il 99.9% del tempo.

Bye.

Back to it.comp.www.php | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

User che veda uno o più brand GabrieleMax <gabriele1NOSPAM@hotmail.com> - 2018-04-07 21:43 +0200
  Re: User che veda uno o più brand Alessandro Pellizzari <shuriken@amiran.it> - 2018-04-07 21:32 +0100
    Re: User che veda uno o più brand GabrieleMax <gabriele1NOSPAM@hotmail.com> - 2018-04-08 14:47 +0200
      Re: User che veda uno o più brand Alessandro Pellizzari <shuriken@amiran.it> - 2018-04-08 16:38 +0100
        Re: User che veda uno o più brand GabrieleMax <gabriele1NOSPAM@hotmail.com> - 2018-04-08 22:57 +0200
          Re: User che veda uno o più brand Alessandro Pellizzari <shuriken@amiran.it> - 2018-04-09 15:36 +0100
            Re: User che veda uno o più brand GabrieleMax <gabriele1NOSPAM@hotmail.com> - 2018-04-09 22:06 +0200
    Re: User che veda uno o più brand fmassei@gmail.com - 2018-04-08 08:55 -0700

csiph-web