1
votes

Inconvénients de stocker toutes les colonnes dans une colonne JSON

Quels sont les inconvénients de stocker toutes les colonnes d'une table dans une seule colonne JSON?

par exemple pour une table utilisateur au lieu d'avoir ceci

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
    $table->json('attributes'); // contains all the fields
        $table->timestamps();   
        $table->rememberToken();
    });

Il suffit de faire ceci

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('firstname');
        $table->string('lastname');
        $table->string('username')->unique();
        $table->string('email')->unique();
        $table->string('password');
        $table->timestamps();            
        $table->rememberToken();
    });


Mettre à jour

Bref, cette approche n'est pas bonne pour les produits avec des propriétés personnalisées par exemple. Les bases de données NoSql sont optimales pour les sites / systèmes de commerce électronique.

mais le champ JSON peut être utile pour combiner des champs moins utilisés comme le sexe, l'âge, l'adresse.

vrai?


2 commentaires

J'espère que ma conclusion est juste. L'utilisation de JSON pour tous les champs ajoute une couche supplémentaire et un effort supplémentaire sur les données. De plus, ce serait comme utiliser SQL dans un autre but que celui auquel il est destiné, donc si tous les champs sont remplacés par JSON, mieux vaut utiliser la base de données NoSQL. En fin de compte, tout dépend des exigences de l'entreprise, quel type de base de données devons-nous choisir.


Vous pouvez interroger JSON et il existe de nombreuses fonctions JSON, l'inconvénient est qu'il n'est pas structuré, donc probablement les mêmes inconvénients que le schéma sans bases de données. mariadb.com/resources/blog/json-with-mariadb-10 -2


3 Réponses :


0
votes

Il y a tellement d'inconvénients, mais j'aimerais en mentionner trois.

  1. Vous ne pourrez pas interroger via sql les données de votre table de manière propre.
  2. Vous devez gérer les données d'entité par vos propres ressources de serveur.
  3. Le stockage de vos données de cette manière est plus susceptible d'être corrompu en raison du processus d'analyse et de la gestion manuelle.

Ce n'est pas le but du stockage SQL. Peut-être que vous pouvez explorer des options telles que des bases de données basées sur des documents comme MongoDb


0 commentaires

0
votes

Vous ne pouvez pas diffuser correctement les données. Interroger et filtrer le json peut être pénible, vous ne pouvez pas utiliser de clés étrangères, si vous enregistrez les identifiants d'autres tables, pas si bien si vous faites une erreur et supprimez toute la colonne, vous perdrez toutes les données au lieu de la colonne de travail par colonne.

Regardez ces deux réponses:

Stockage de JSON dans base de données ou avoir une nouvelle colonne pour chaque clé

Est y a-t-il un avantage / un inconvénient à stocker la valeur du champ sous forme de tableau JSON plutôt que de créer une nouvelle table et une relation un-à-plusieurs pari?


0 commentaires

1
votes
  • Vous ne pouvez pas interroger les données json
  • Vous obtenez une longue chaîne laide jusqu'à ce que vous la désérialisiez
  • Vous gérerez manuellement le contenu de la colonne json pendant la récupération / l'insertion, c'est-à-dire le codage et le décodage, ce qui entraînera une consommation des ressources du serveur.

0 commentaires