Modélisation base de données

a marqué ce sujet comme résolu.

Salut à tous,

Je n’ai pas de question sur un problème en particulier mais plutôt une question générale sur la modélisation des bases de données.

Je pratique le développement web depuis quelques années maintenant, mais j’ai toujours travaillé seul ou avec des personnes dont le développement n’était pas leur spécialité. J’ai aussi tout appris en autodidacte et j’ai donc un certain manque d’expérience sur la modélisation des bases de données. C’est toujours un point sur lequel je passe beaucoup de temps sans être pleinement satisfait du résultat final.

Aujourd’hui je me pose une question qui est la suivante : dans certaines applications web telles que Trello, Notion ou encore Monday, on a la possibilité de créer du contenu de différent type, avec pleins d’options (timer, étiquettes, texte, date, tâches etc…) mais comment font-ils pour enregistrer toutes ses données en base de données ?

J’ai toujours été habitué à avoir des bases "rigides" où j’enregistre, dans le cas d’un CRM par exemple, le nom dans la colonne "Nom", le prénom, la fonction et ainsi de suite.

J’ai l’impression que de leur côté ils sont capables d’enregistrer n’importe quel type de données au même endroit. Je me trompe ? Je suis très curieux de savoir comment ils font et surtout si c’est quelque chose que je peux faire moi aussi :)

Merci d’avance pour vos éclaircissements.

Salut Ariol,

Comme tu le dis toi-même, ta question est un peu vague mais j’espère que ma réponse te sera utile, au moins partiellement.

Une façon de faire quand tu as des données non-structurées est d’utiliser une base de données NoSql (par exemple, MongoDB). Avec ce genre de base de données, tu n’as pas à définir de schéma pour tes tables et grosso modo, tu vas y stocker des objects JSON, chacun d’eux pouvant contenir un jeu de données différent. Je n’ai jamais travaillé avec une telle base de données donc je suis loin d’être un expert donc si ça t’intéresse, je t’invite à lire ce tutoriel (il date de 2016 dpnc il n’est peut-être plus tout à fait à jour) ou à chercher des ressources en ligne, il y en a des tas.

Mais rien ne t’oblige à partir pour une solution NoSql, tu peux très bien arriver au même résultat avec une bonne vieille base de données SQL classique. Prenons l’exemple de Notion que tu utiliserais comme un gestionnaire de tâches. Quand tu crées une nouvelle tâche, tu peux définir les propriétés que tu souhaites utiliser (par exemple, une date à laquelle la date doit être complétée, un status, une priorité, etc.). Tu pourrais modéliser ça comme suit:

  • Une table appelée Page qui représente les tâches. Celle-ci contiendrait les colonnes suivantes id, title (et potentiellement plus)
  • Une table Property qui représente les propriétés que tu as ajoutées à tes tâches. Celle-ci contiendrait les colonnes property_id, type_id
  • Une table PropertyType qui représente les différents types de propriétés que Notion autorise (champ libre, date, checkbox, etc.). Elle contiendrait les colonnes suivantes : id, typeCode, validator
  • Plusieurs tables, une part type de propriétés. Par exemple, une table TextProperty avec les colonnes id et text. Une table BooleanProperty avec les colonnes id et checked. Et ainsi de suite avec des tables DateProperty, EmailProperty, etc.
  • Une table appelée Page_Property qui ne serait qu’une table qui fait le lien entre tes tables Page et Property.

Ceci n’est qu’un exemple rapide et il existe d’autres manières de faire, mais j’espère que ça peut te donner une idée de comment approcher ce genre de problèmes où l’utilisateur a un peu plus de libertés que d’habitude pour choisir les champs qu’il utilise.

+3 -0

Salut,

Merci pour ta réponse très détaillée. J’avais déjà entendu parler des bases de données NoSQL mais j’ai l’impression que c’est plutôt orienté JavaScript et comme je travaille le plus souvent en PHP je n’étais pas allé plus loin.

Concernant ta seconde solution à base de MySQL, ça me paraît très clair comme fonctionnement. Je vais essayer de creuser un peu plus ta réponse en essayant de pratiquer dessus.

Encore merci pour ta réponse :)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte