CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Besoin d'aide en SQL

News jeu

Expeditions: Samurai veut révolutionner le RPG tactique avec une aventure entièrement jouable en coop

Voir
mandraker17
mandraker17
Niveau 33
14 août 2021 à 16:21:32

Bonjour à tous.
Je travaille sur un projet d'application avec Flutter et j'aimerais utiliser SQLite.
Seul soucis, je n'ai pas beaucoup de connaissance en SQL et je ne sais pas quel type je dois utiliser pour bien créer ma table.

Mon objet est formé ainsi :
int id
String name
String albumId
List<String> categories

Quelle sont les solutions pour stocker une List de String?

Merci de votre temps

Pseudo supprimé
Pseudo supprimé 14 août 2021 à 16:29:47

Cherche many to many relationship

godrik
godrik
Niveau 30
14 août 2021 à 17:00:25

Mon objet est formé ainsi :
int id
String name
String albumId
List<String> categories

Quelle sont les solutions pour stocker une List de String?

On ne stocke pas de liste dans un seul champ en SQL. Ce principe s'appelle "premiere forme normale"

Ce que tu veux ici est avoir une table A pour stocker des tuples (id, name, albumId). Tu voudrais une deuxieme table B pour stocker des tuples (id, category) et tu reconstruit ta liste de categorie en faisant une jointure entre A et B.

Note: pourquoi tu as id et albumId, ce n'est pas la meme chose?

mandraker17
mandraker17
Niveau 33
14 août 2021 à 17:35:16

Le 14 août 2021 à 17:00:25 :

Mon objet est formé ainsi :
int id
String name
String albumId
List<String> categories

Quelle sont les solutions pour stocker une List de String?

On ne stocke pas de liste dans un seul champ en SQL. Ce principe s'appelle "premiere forme normale"

Ce que tu veux ici est avoir une table A pour stocker des tuples (id, name, albumId). Tu voudrais une deuxieme table B pour stocker des tuples (id, category) et tu reconstruit ta liste de categorie en faisant une jointure entre A et B.

Note: pourquoi tu as id et albumId, ce n'est pas la meme chose?

non ce n'est pas la même chose, l'albumId est un identifiant que j'utilise avec l'API de Spotify

Pseudo supprimé
Pseudo supprimé 14 août 2021 à 19:27:08

À noter quand même qu'il y a deux possibilités

  • Dupliquer les catégories : si deux albums ont la même catégorie, on stocke deux fois la catégorie (one-to-many)
  • Ne pas dupliquer les catégories : si deux albums ont la même catégorie, on stocke qu'une fois la catégorie mais on va utiliser une table pour faire la jointure entre les albums et les catégories (many-to-many)

On va préférer du many-to-many pour quelque chose de plus rigide où la liste des catégories est fixée. Si par contre la personne qui upload un album peut choisir de remplir les catégories comme il veut sans avoir à piocher dans une liste pré-établie on va plutôt utiliser un one-to-many qui sera plus flexible.

-ElPsyKongroo-
-ElPsyKongroo-
Niveau 57
21 août 2021 à 09:35:33

Il te faut une table albums, une table catégorie et une table qui contient les jonctions.
Pour la simple et bonne raison qu'un album peut avoir plusieurs catégories et une catégorie peut correspondre à plusieurs albums.
(c'est la base en modélisation)

table album :
int alb_id (clef primaire)
String alb_name
String alb_albumId

table catégorie :
int cat_id (clef primaire)
string cat_name

table jonction cat_alb :
int cat_id (clef primaire et étrangère)
int alb_id (clef primaire et étrangère)

pour avoir les albums d'une catégorie :
select a.* from albums a join cat_alb ca on ca.alb_id = a.alb_id join categorie c on ca.cat_id = c.cat_id where c.cat_id = @categorie

pour avoir les catégories d'un album :
select c.* from categorie c join cat_alb ca on ca.cat_id = c.cat_id join album a on ca.alb_id = a.alb_id where a.alb_id = @album

Les solution proposées par mes vdd sont du grand n'importe quoi, je plein leur collègues de travail si ils bossent dans une entreprise.

Message édité le 21 août 2021 à 09:40:05 par -ElPsyKongroo-
mov_eax_0
mov_eax_0
Niveau 10
21 août 2021 à 10:05:16

Le 21 août 2021 à 09:35:33 :
Il te faut une table albums, une table catégorie et une table qui contient les jonctions.
Pour la simple et bonne raison qu'un album peut avoir plusieurs catégories et une catégorie peut correspondre à plusieurs albums.
(c'est la base en modélisation)

table album :
int alb_id (clef primaire)
String alb_name
String alb_albumId

table catégorie :
int cat_id (clef primaire)
string cat_name

table jonction cat_alb :
int cat_id (clef primaire et étrangère)
int alb_id (clef primaire et étrangère)

pour avoir les albums d'une catégorie :
select a.* from albums a join cat_alb ca on ca.alb_id = a.alb_id join categorie c on ca.cat_id = c.cat_id where c.cat_id = @categorie

pour avoir les catégories d'un album :
select c.* from categorie c join cat_alb ca on ca.cat_id = c.cat_id join album a on ca.alb_id = a.alb_id where a.alb_id = @album

Les solution proposées par mes vdd sont du grand n'importe quoi, je plein leur collègues de travail si ils bossent dans une entreprise.

bah non ils disent la même chose que toi

Pseudo supprimé
Pseudo supprimé 21 août 2021 à 18:59:56

Le 21 août 2021 à 09:35:33 :
Il te faut une table albums, une table catégorie et une table qui contient les jonctions.
Pour la simple et bonne raison qu'un album peut avoir plusieurs catégories et une catégorie peut correspondre à plusieurs albums.
(c'est la base en modélisation)

table album :
int alb_id (clef primaire)
String alb_name
String alb_albumId

table catégorie :
int cat_id (clef primaire)
string cat_name

table jonction cat_alb :
int cat_id (clef primaire et étrangère)
int alb_id (clef primaire et étrangère)

pour avoir les albums d'une catégorie :
select a.* from albums a join cat_alb ca on ca.alb_id = a.alb_id join categorie c on ca.cat_id = c.cat_id where c.cat_id = @categorie

pour avoir les catégories d'un album :
select c.* from categorie c join cat_alb ca on ca.cat_id = c.cat_id join album a on ca.alb_id = a.alb_id where a.alb_id = @album

Les solution proposées par mes vdd sont du grand n'importe quoi, je plein leur collègues de travail si ils bossent dans une entreprise.

C'est exactement la solution que j'ai proposée. Et comme je l'ai dit dans mon message ça dépend. Si y a une liste assez rigide de catégories alors oui c'est une bonne modélisation, ça l'est beaucoup moins si la catégorie peut être une chaîne plus arbitraire et auquel cas on va préférer un one to many.

jyvaispointcon
jyvaispointcon
Niveau 28
01 septembre 2021 à 15:11:57

Pour info, on peut tres bien enregistrer une liste dans une colonne mySQL ? du JSon ou un array sous forme de string. alors ce n'est peut-etre pas la meilleur solution mais ca se fait sans problème.

Message édité le 01 septembre 2021 à 15:12:09 par jyvaispointcon
godrik
godrik
Niveau 30
01 septembre 2021 à 17:00:41

Le 01 septembre 2021 à 15:11:57 :
Pour info, on peut tres bien enregistrer une liste dans une colonne mySQL ? du JSon ou un array sous forme de string. alors ce n'est peut-etre pas la meilleur solution mais ca se fait sans problème.

Oui on peut toujours faire ca. Mais ca brise le principe d'atomicite de la modelisation qui est important pour pouvoir utiliser l'information contenu dans le champ.

JediXav9
JediXav9
Niveau 10
07 septembre 2021 à 12:18:19

Le 01 septembre 2021 à 15:11:57 :
Pour info, on peut tres bien enregistrer une liste dans une colonne mySQL ? du JSon ou un array sous forme de string. alors ce n'est peut-etre pas la meilleur solution mais ca se fait sans problème.

On pourrait aussi stocker le nom et la valeur de toute les colonnes dans un seul champs texte/LOB mais çe n'en ferait pas une bonne idée pour autant.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware