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