Palier aux limites structurales d'une base de données SQL

Palier aux limites structurales d'une base de données SQL

Le choix du type de base de données pour un projet web et l'un de plus important pour la réalisation et l'évolution du projet dans le temps. aujourd'hui il existe plusieurs du type de base de données voici quelques un :

  • BDD NoSQL Ils sont utilisés pour de grands ensembles de données distribuées. Il y a quelques gros problèmes de performance des données qui sont traités par les bases de données relationnelles, ce genre de problèmes sont facilement géré par les bases de données NoSQL. L'analyse des données non structurées de grande taille qui peuvent être stockées sur plusieurs serveurs virtuels du cloud est très efficace.

  • BDD Relationnelle Ces bases de données sont classées par un ensemble de tableaux où les données sont classées dans une catégorie prédéfinie. La table se compose de lignes et de colonnes où la colonne comporte une entrée pour les données d'une catégorie spécifique et les lignes contiennent des exemples pour les données définies en fonction de la catégorie. Le langage SQL (Structured Query Language) est l'interface standard de l'utilisateur et du programme d'application pour une base de données relationnelle. Diverses opérations simples peuvent être appliquées sur la table, ce qui permet d'étendre plus facilement ces bases de données, de joindre deux bases de données ayant une relation commune et de modifier toutes les applications existantes.

  • BDD Graphe Le graphe est un ensemble de nœuds et d'arêtes où chaque nœud est utilisé pour représenter une entité et chaque arête décrit la relation entre les entités. Une base de données orientée graphes, ou base de données de graphes, est un type de base de données NoSQL qui utilise la théorie des graphes pour stocker, cartographier et interroger les relations. Les bases de données de graphes sont essentiellement utilisées pour analyser les interconnexions. Par exemple, les entreprises peuvent utiliser une base de données de graphiques pour extraire des données sur les clients des médias sociaux.

Il est possible que pour certains projet on ait besoin d'une base de données relationnelle (MySQL, Maria-db, etc...), ceci implique de modéliser la base de données avant même de commencer à coder le projet (en principe 🤫 🤭). ainsi nous avons déjà une structure de données bien définies, ce qui nous facilite le développement et le rend rapide.

Et les champs supplémentaires ?

Etant dans une base données relationnelle tout les champs des tables sont déjà définis. et si on veut rajouter un champ, il faudrait mettre à jour la structure de la table.

Mise en situation

imaginons que j'ai une application qui doit enregistrer des utilisateurs (des employés d'une entreprise par exemple). ma table users pourrait ressembler à ça :

id: int;
name: varchar;
email: varchar;
created_at: datetime;

après quelques mois, on s'en rend compte qu'il faudrait rajouter leur état civil, comme nous savons qu'il y a que 4 possibilités possibles on pourrait rajouter un champ civil_status :

id: int
name: varchar
email: varchar
created_at: datetime
civil_status: enum(married, single, divorced, widower);

ceci est déjà une bonne solution ! mais nous avons une limite, dans le cas où il faudrait aussi enregistrer les qualités ou caractères particuliers à chaque employé par exemple, il sera difficile de prévoir à l'avance un champ correspondant et aussi les différentes valeurs possible, la structure nous limite donc et faudrait trouver un moyen de la contourner.

Un Champ "Properties" 🔥🔥🔥

l'astuce serait tout simple de rajouter un champ properties, ce champ sera du type JSON (TEXT si votre SGBD ne supporte pas le type JSON)

id: int
name: varchar
email: varchar
created_at: datetime
properties : json | longtext

Implémentons 👨🏾‍💻👨🏾‍💻

Nous allons implementer cette fonctionnalité dans une application PHP - Laravel .

pour cela nous allons utiliser un package intéressant, Laravel Overflow : Le paquet Laravel Overflow permettra d'ajouter facilement une colonne de dépassement à une requête de formulaire.

installation et utilisation

$ composer require craftlogan/laravel-overflow

Lors de la mise en place d'une migration, vous pouvez utiliser une colonne json ou une colonne texte :

 public function up()
 {
 Schema::create('test_models', function (Blueprint $table){
 $table->increments('id');
 $table->string('name');
 //$table->text('properties');  // Utilisez ce type de colonne si vous utilisez sqlite ou une version mysql inférieure à 5.7
 //$table->json('properties');  // Si votre base de données supporte json, je vous recommande d'utiliser la colonne json
 $table->timestamps();
 });
 }

Après avoir configuré les champs, vous devez faire migrer votre table.

$ php artisan migrate

dans le controller :

public function store(Request $request)
{
 $testmodel = TestModel::create($request->allWithOverflow(new TestModel(),'properties'));
}

ou

public function store(\App\Http\Requests\TestFormRequest $request)
{
 $testmodel = TestModel::create($request->allWithOverflow(new TestModel(),'properties'));
}

toutes les valeurs supplémentaires seront enregistrer dans le champs "properties".

👉🏽 pour plus d'info : La documentation