Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.www.php > #21962
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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