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


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

Re: [OT] MySQL/MariaDB db per gusti utenti

From Alessandro Pellizzari <shuriken@amiran.it>
Newsgroups it.comp.www.php
Subject Re: [OT] MySQL/MariaDB db per gusti utenti
Date 2019-04-22 17:23 +0100
Message-ID <gi683eF802jU1@mid.individual.net> (permalink)
References <q9i9g9$1i7b$1@gioia.aioe.org> <gi5gahF2ut7U1@mid.individual.net> <q9kohh$3g1$1@gioia.aioe.org>

Show all headers | View raw


On 22/04/2019 17:01, ^Bart wrote:

>> In SQL hai relativamente poca scelta, una volta che decidi di
>> normalizzare i DB.
> 
> Per ora ho studiato solo SQL, ho presente l'esistenza di altre 
> tecnologie di cui però non conosco le caratteristiche, in base alla tua 
> esperienza vi sarebbe ipoteticamente un'altra soluzione con un'altra 
> tecnologia?

Ogni tecnologia ha i suoi pro e i suoi contro, e la stessa cosa può
venire implementata con diversi tipi di DB con pro e contro.

Bisognerebbe conoscere tutte le specifiche richieste dall'applicazione
per consigliare qualcosa di specifico.

La cosa migliore è sempre astrarre lo storage dalla logica
dell'applicazione, e personalmente ho trovato che usare GraphQL a
livello API porta a pensare a modi più astratti di strutturare il DB e
renderlo indipendente, ma per ora ti consiglio di concentrarti su SQL e
non pensarci troppo.

> Ora ho un ultimo dubbio sulle traduzioni, ho una main table degli 
> ingredients in inglese ed una ingredient_langs con tutte le traduzioni 
> collegata ad ogni id della tabella ingredients.

Io lo farei in modo leggermente diverso: una singola tabella per gli
ingredienti, con una chiave primaria su due colonne:

create table languages (
  id primary key -- bla bla bla la roba di MySQL
  name varchar(255)
)

create table ingredients (
  id int, -- NB: no primary key
  lang int,
  name
  foreign key fk_lang(lang) references languages(id),
  primary key (id, lang)
)

Hai la rogna di dover generare a mano un nuovo "id" quando crei un nuovo
ingrediente, ma la tabella diventa qualcosa tipo:

--------------------------------
id	|     name	| lang |
--------------------------------
1	|     Latte	|   3  |
2	|     Farro     |   3  |
3	|     Cipolla	|   3  |
1	|     Leche	|   2  |
2	|     Farro	|   2  |
3	|     Cebolla	|   2  |

Quindi il latte avrà sempre id 1 in tutte le lingue, e costruire le
query sarà più semplice, oltre a non dover avere un'asplosione algebrica
di righe nella tabella users (ricorda che è n:m, quindi ti serve una
tabella di collegamento):

create table users(
  id primary key,
  name varchar(255)
)

create table user_ingredients (
  user int,
  ingredient int,
  foreign key fk_user(user) references users(id),
  foreign key fk_ingredient(ingredient) references ingredients(id)
)

Per esempio, volendo prendere gli ingredienti dell'utente 5 in spagnolo
(lang 2):

select u.id, u.name, i.name
from
  users u
left join user_ingredients ui
  on ui.user = user.id
left join ingredients i
  on i.id = ui.ingredient
  and i.lang = 2
where
  u.id = 5

O qualcosa del genere (non l'ho testata)

Bye.

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


Thread

[OT] MySQL/MariaDB db per gusti utenti ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-04-21 19:32 +0200
  Re: [OT] MySQL/MariaDB db per gusti utenti Alessandro Pellizzari <shuriken@amiran.it> - 2019-04-22 10:37 +0100
    Re: [OT] MySQL/MariaDB db per gusti utenti ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-04-22 18:01 +0200
      Re: [OT] MySQL/MariaDB db per gusti utenti Alessandro Pellizzari <shuriken@amiran.it> - 2019-04-22 17:23 +0100
        Re: [OT] MySQL/MariaDB db per gusti utenti ^Bart <gabriele1NOSPAM@hotmail.com> - 2019-04-22 19:13 +0200

csiph-web