CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • 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
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Permettre à l'utilisateur de créer ses propres types de données

DébutPage précedente
123
Page suivanteFin
abdelmouloud3 abdelmouloud3
MP
Niveau 10
06 novembre 2019 à 09:51:22

Bonjour,

J'ai une question de conception: dans une application, comment faire pour que l'utilisateur puisse créer ses propres types de données sans avoir recours à la maintenance d'un développeur ?

Ex: Le site d'un vendeur de tapis souhaite mettre en vente des nouveaux tapis spéciaux qui nécessitent + d'informations pour être décris, le format initial de données ne contenant que les dimensions, matériaux et origine. Il souhaite par exemple enregistrer le poids pour ces tapis là.

Ma solution naïve serait de factoriser les informations essentielles dans une table de la BDDR et permettre à l'utilisateur de créer des nouvelles tables (avec une interface simplifiée il ne va évidemment pas écrire une requete sql), sur lesquelles il va ajouter les informations qu'il souhaite, ces tables hériteront de la table mère, mais je n'ai jamais entendu parler de cette méthode l'an dernier durant mes cours donc je sais pas si ça se fait.

Message édité le 06 novembre 2019 à 09:54:03 par abdelmouloud3
TidoDaWiseOlMan TidoDaWiseOlMan
MP
Niveau 7
06 novembre 2019 à 10:51:17

Quel langage ? Quel framework ?

J'imagine que ça peut très bien se faire avec un backoffice (comme celui de Drupal) ou... un PIM.

abdelmouloud3 abdelmouloud3
MP
Niveau 10
06 novembre 2019 à 11:13:47

J'ai pas encore decidé de ça, ce sera soit node/angular ou bien php/mysql avec du js et bootstrap. L'application va être simple (3-4 pages maximum).

UndeadMarston6 UndeadMarston6
MP
Niveau 10
06 novembre 2019 à 11:24:29

Tu dois mieux penser ta structure de donnée, tu dois pouvoir gérer ta création de produit sans créer de table à la volé. :(

Le but c'est simplement de créer des lignes dans des tables existantes

mov_eax_1 mov_eax_1
MP
Niveau 10
06 novembre 2019 à 11:42:32

c'est pas un soucis tu peux avoir une table qui représente un article et une table qui représente une propriété
quand le vendeur crée son article, il peut rajouter autant de propriétés qu'il veut

|article| 1,n ------------ 1,1 |propriete| 
Message édité le 06 novembre 2019 à 11:45:28 par mov_eax_1
Raidden36 Raidden36
MP
Niveau 6
06 novembre 2019 à 11:43:27

Le 06 novembre 2019 à 11:24:29 UndeadMarston6 a écrit :
Tu dois mieux penser ta structure de donnée, tu dois pouvoir gérer ta création de produit sans créer de table à la volé. :(

Le but c'est simplement de créer des lignes dans des tables existantes

Je suis d'accord avec ça.
Créer une table, c'est un gros non pour moi.

Par contre, tu pourrais utiliser MongoDB par exemple, qui te permet de stocker des dictionnaires. ça rendrait la gestion de ton stockage de données extrêmement simple.

Tu pourrais donc stocker ton objet1 en tant que :
{"prix": 22,
"poid": 1}
Et ton objet deux en tant que :
{"prix": 22,
"poid": 1,
"largeur": 3}

Tu pourrais sinon sérialiser tes objets dans une bdd SQL (attention avec ça, faut savoir ce qu'on fait quand on décide d'implémenter de la sérialisation)

Message édité le 06 novembre 2019 à 11:48:01 par Raidden36
Batora Batora
MP
Niveau 10
06 novembre 2019 à 16:13:34

Le 06 novembre 2019 à 11:42:32 mov_eax_1 a écrit :
c'est pas un soucis tu peux avoir une table qui représente un article et une table qui représente une propriété
quand le vendeur crée son article, il peut rajouter autant de propriétés qu'il veut

|article| 1,n ------------ 1,1 |propriete| 

C'est la solution que je conseille parce que ça permet de faire des queries correctes sur les propriétés.

Raidden36 Raidden36
MP
Niveau 6
06 novembre 2019 à 18:20:17

Le 06 novembre 2019 à 16:13:34 Batora a écrit :

Le 06 novembre 2019 à 11:42:32 mov_eax_1 a écrit :
c'est pas un soucis tu peux avoir une table qui représente un article et une table qui représente une propriété
quand le vendeur crée son article, il peut rajouter autant de propriétés qu'il veut

|article| 1,n ------------ 1,1 |propriete| 

C'est la solution que je conseille parce que ça permet de faire des queries correctes sur les propriétés.

On peut le faire avec MongoDB aussi.

boucif boucif
MP
Niveau 24
06 novembre 2019 à 21:07:37

Le 06 novembre 2019 à 11:42:32 mov_eax_1 a écrit :
c'est pas un soucis tu peux avoir une table qui représente un article et une table qui représente une propriété
quand le vendeur crée son article, il peut rajouter autant de propriétés qu'il veut

|article| 1,n ------------ 1,1 |propriete| 

C'est la bonne solution, je boss sur un projet où ils ont mis en place ce genre d'infos, ils en ont crée de plusieurs type qui permet de définir si c'est une saisie libre, une dropdown, un nombre ....

En tout cas je partirai sur ça, juste après à toi de récupérer ça sous forme de liste ou de dictionnaire clé valeur, certes c'est le fonctionnement classique de certaine base NoSQL mais ça n'a aucun sens de passer sur du NoSQL juste pour ça.

NurseryRhyme NurseryRhyme
MP
Niveau 9
06 novembre 2019 à 22:26:38

Le 06 novembre 2019 à 18:20:17 Raidden36 a écrit :

Le 06 novembre 2019 à 16:13:34 Batora a écrit :

Le 06 novembre 2019 à 11:42:32 mov_eax_1 a écrit :
c'est pas un soucis tu peux avoir une table qui représente un article et une table qui représente une propriété
quand le vendeur crée son article, il peut rajouter autant de propriétés qu'il veut

|article| 1,n ------------ 1,1 |propriete| 

C'est la solution que je conseille parce que ça permet de faire des queries correctes sur les propriétés.

On peut le faire avec MongoDB aussi.

Ce serait con de passer sur Mongo juste pour ca.

abdelmouloud3 abdelmouloud3
MP
Niveau 10
07 novembre 2019 à 08:15:55

Bonjour, j'ai pris notes de vos réponses et vous en remercie ! Du coup je vais partir sur la solution de mov_eax_1.

abdelmouloud3 abdelmouloud3
MP
Niveau 10
07 novembre 2019 à 08:51:13

Un doute subsiste, si l'on veut classifier les produits en plusieurs type (ex: Un jour notre vendeur souhaite vendre du parquet en plus des tapis) afin de créer des types génériques, cela doit aussi se faire via la table propriété (via un attribut que l'on nommerait "type" ?)

EDIT: Je vais mettre le type dans la table "article" et m'assurer que chaque article du type X soit bien référencé par toute les propriétés en question

Message édité le 07 novembre 2019 à 08:53:07 par abdelmouloud3
Raidden36 Raidden36
MP
Niveau 6
07 novembre 2019 à 09:12:46

Le 06 novembre 2019 à 22:26:38 NurseryRhyme a écrit :

Le 06 novembre 2019 à 18:20:17 Raidden36 a écrit :

Le 06 novembre 2019 à 16:13:34 Batora a écrit :

Le 06 novembre 2019 à 11:42:32 mov_eax_1 a écrit :
c'est pas un soucis tu peux avoir une table qui représente un article et une table qui représente une propriété
quand le vendeur crée son article, il peut rajouter autant de propriétés qu'il veut

|article| 1,n ------------ 1,1 |propriete| 

C'est la solution que je conseille parce que ça permet de faire des queries correctes sur les propriétés.

On peut le faire avec MongoDB aussi.

Ce serait con de passer sur Mongo juste pour ca.

Si j'ai bien compris, il était en recherche de techno, donc à mon sens, pour une petite marketplace, on ne touche pas aux problèmes de mongo, donc il est plus adapté que mySQL.
Mais ce n'est que mon avis.

UndeadMarston6 UndeadMarston6
MP
Niveau 10
07 novembre 2019 à 09:58:08

Le 06 novembre 2019 à 11:42:32 mov_eax_1 a écrit :
c'est pas un soucis tu peux avoir une table qui représente un article et une table qui représente une propriété
quand le vendeur crée son article, il peut rajouter autant de propriétés qu'il veut

|article| 1,n ------------ 1,1 |propriete| 

C'est ce que fait WordPress il me semble ... Je ne suis pas vraiment fan. :(

Je trouve la solution mongoDB plus intéressante

Et même je dirai d'utiliser PostgreSQL, tu peux stocker toute en JSON dans un champ et faire des queries dans le JSON même (Postgre :coeur: )

abdelmouloud3 abdelmouloud3
MP
Niveau 10
07 novembre 2019 à 10:02:45

Je connais pas trop MongoDB ni le Nosql en général, je sais pas si ça prendrait du temps de me former la dessus sachant que j'ai des délais à respecter (même si la partie conception de la BDD ne devrait pas être trop longue)

boucif boucif
MP
Niveau 24
07 novembre 2019 à 10:19:37

Mais c'est quoi cette génération abreuver au JSON, qui veut directement stocker du JSON en BDD et le NoSQL n'est pas la réponse à tout, dans son cas un sgbdr classique est suffisant (mysql/postgrey/oracle/sql server ...).
Il suffit juste de savoir comment conceptualiser les données, à force de pratique ça te paraîtrai simple.
Je te conseil dans ton cas d'avoir une table ou tu stock les types d'articles et qui soit modifiable par l'utilisateur pour ajouter de nouveau type d'articles, une autre table ou tu défini des paramètres supplémentaire pour un article (tu peux sinon réutiliser la première table), ta table article ou tu stock ton article avec une foreign key vers la table type article et une dernière table qui fait le lien entre un article et la liste de ses propriétés ...

abdelmouloud3 abdelmouloud3
MP
Niveau 10
07 novembre 2019 à 10:30:40

Je pense avoir à peu prés fait ça (table "type", table "propriete", table "valeur" et la table "article"):

Chaque article référencie son type
Chaque propriété référencie le type auquel elle est rattachée
Chaque valeur référenciee la propriété qu'elle mesure et l'article concerné

Message édité le 07 novembre 2019 à 10:31:07 par abdelmouloud3
UndeadMarston6 UndeadMarston6
MP
Niveau 10
07 novembre 2019 à 11:56:17

Mais c'est quoi cette génération abreuver au JSON

Le JSON est puissant et en utilisant les bons outils peut être traiter comme des champs (avec Postgre par exemple) donc c'est une excellente alternative :ok:

et une dernière table qui fait le lien entre un article et la liste de ses propriétés ..

Ce que fait WP en gros, je pense qu'il faut savoir utiliser les bons outils au bon moment personnellement mais bon :(

Raidden36 Raidden36
MP
Niveau 6
07 novembre 2019 à 14:50:33

Le 07 novembre 2019 à 10:19:37 boucif a écrit :
Mais c'est quoi cette génération abreuver au JSON, qui veut directement stocker du JSON en BDD et le NoSQL n'est pas la réponse à tout, dans son cas un sgbdr classique est suffisant (mysql/postgrey/oracle/sql server ...).
Il suffit juste de savoir comment conceptualiser les données, à force de pratique ça te paraîtrai simple.
Je te conseil dans ton cas d'avoir une table ou tu stock les types d'articles et qui soit modifiable par l'utilisateur pour ajouter de nouveau type d'articles, une autre table ou tu défini des paramètres supplémentaire pour un article (tu peux sinon réutiliser la première table), ta table article ou tu stock ton article avec une foreign key vers la table type article et une dernière table qui fait le lien entre un article et la liste de ses propriétés ...

à l'origine je ne fais que du SQL, je me suis mis aux BDD qui stock en objet/JSON que récemment.
Et même si ça pose beaucoup de soucis dans certains cas, notamment lors de traitement big data où tu dois update de grosses BDD (Mongo, par exemple, fait un buffering assez sale des querys, et donc, va être de plus en plus en lent au fur et à mesure que tu le solicite, vu qu'il ne permet pas de faire des querys "intelligentes" comme en SQL), ça a aussi beaucoup d'avantages dans d'autres.
Ne pas s'adapter aux nouvelles technos, et refuser d'en tirer le bon où il est, c'est un problème, pour moi.

En l’occurrence, ici, on est pile dans ce pourquoi des BDD comme Mongo existent. C'est, dans ce cas là, je suis désolé, mais objectivement mieux.

En soit, tant que tu n'as pas à faire de query complexes, Mongo est mieux, car complètement implémenter dans la plupart des langages, pas de langage annexe.
C'est aussi bien son atout que son principale défaut.

Sur une marketplace comme celle là, ça m'étonnerait grandement qu'il y est à faire de query complexes (sur la majorité des marketplaces, c'est pas le cas), donc autant normaliser sa BDD.

Pour te répondre OP, Mongo est très facile à prendre en main, c'est comme si tu créais des objets dans ton code, et que tu les utilisais normalement.

boucif boucif
MP
Niveau 24
07 novembre 2019 à 15:16:09

Le 07 novembre 2019 à 10:30:40 Abdelmouloud3 a écrit :
Je pense avoir à peu prés fait ça (table "type", table "propriete", table "valeur" et la table "article"):

Chaque article référencie son type
Chaque propriété référencie le type auquel elle est rattachée
Chaque valeur référenciee la propriété qu'elle mesure et l'article concerné

Si tu fais une table propriete pas besoin de référencé un type ou tu peux mettre directement le nom de tes propriétés dans la table "type"

Bein c'est ce que fait Wp et plein d'autre outil je pense, j'ai du travailler sur 2-3 projets ou ce genre de chose est faite.

On va pas s'amuser à modifier la bdd à chaque fois que le client ajoute une propriété à ses données surtout que implique un redéploiement de l'application.
Passer par une relation ternaire est la meilleure solution

DébutPage précedente
Page suivanteFin
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment