7
votes

Colonne JSON VS Plusieurs colonnes

Je ne sais même pas si l'appelant colonne sérialisée est juste, mais je vais m'expliquer, par exemple, j'ai une table pour les utilisateurs, je veux stocker le téléphone des utilisateurs Numéros (téléphone portable, maison, bureau, etc.), je pensais donc faire une colonne pour chaque type de numéro, mais en même temps est venu à ma tête une idée, que si je sauvegarde un json chaîne dans une seule colonne, donc je n'aurai jamais une colonne qui ne sera probablement jamais utilisée et je peux transformer cette chaîne en une matrice PHP lors de la lecture des données de la base de données, mais j'aimerais entendre les marchandises et les mauvaises Pratique, peut-être que c'est juste une mauvaise idée, mais je veux d'abord savoir ce que d'autres personnes ont à dire sur

merci


0 commentaires

4 Réponses :


2
votes

Je ne ferais que cela avec des données non essentielles, par exemple, la couleur préférée de l'utilisateur, le type de marsupial préféré (évidemment «non essentiel», vous devez décider). Le problème avec cela pour les données essentielles (numéro de téléphone, nom d'utilisateur, email, prénom, nom de famille, etc.) est que vous vous limitez à ce que vous pouvez accomplir avec la base de données. Celles-ci incluent des champs d'indexation, en utilisant la commande par clauses, ou même la recherche d'une donnée spécifique. Si plus tard, vous réalisez que vous devez effectuer l'une de ces tâches, ce sera un mal de tête majeur.

Votre meilleur meilleur dans cette situation consiste à utiliser une table relationnelle pour 1 à de nombreux objets - ex userPhonenumbers . Il aurait 3 colonnes: user_id , téléphone_number et type . Le user_id vous permet de relier les lignes de cette table à la ligne de la table correspondante , le t-t-t-t-t-t-t-t-t-t-t-t-t-il est explicite et le type pourrait être "home", "cellule", "bureau", etc. Cela vous permet d'exécuter toujours les tâches que j'ai mentionnées ci-dessus, et il a également l'avantage supplémentaire de ne pas gaspiller d'espace sur des colonnes vides, comme vous n'ajoutez que rangées à cette table comme vous en avez besoin.

Je ne sais pas à quel point vous êtes familier avec MySQL, mais si vous n'avez pas entendu parler de la normalisation de la base de données et des jointures de la requête, c'est maintenant un bon moment pour commencer à lire sur eux :)

J'espère que cela aide.


1 commentaires

Donc, de MySQL 5.7, vous pouvez commander ou rechercher une pièce spécifique de données avec JSON - de sorte que cette réponse n'est donc plus pertinente.



0
votes

Je ne suis pas sûr de ce que serait les avantages de cette approche. Vous dites "alors, je n'aurai jamais une colonne qui ne sera probablement jamais utilisée ..." Ce que je pense que vous pensez avoir été (dans votre système) que parfois un utilisateur peut ne pas avoir de valeur pour chaque type de numéro de téléphone disponible et qui étant le cas, pourquoi stocker des enregistrements avec des colonnes vides?

stocker des enregistrements avec des colonnes vides n'est pas nécessairement mauvaise. Toutefois, si vous souhaitez normaliser votre base de données, vous pouvez avoir une table séparée pour user_phonenumber et créer une relation 1: nombreuses relation entre utilisateur et user_phonenumber enregistrements. La table user_phonenumber aurait essentiellement quatre colonnes:

  • ID (clé primaire)
  • Userid (clé étrangère à la table des utilisateurs)
  • type (par exemple téléphone portable, maison, bureau, etc.)
  • valeur (numéro de téléphone)

    Les contraintes seraient que l'ID est une clé primaire, ID utilisateur est une clé étrangère pour User.ID et le type serait un énumé (de tous les types de numéro de téléphone possibles).


0 commentaires

8
votes

Réponse courte, multiples colonnes.

Réponse longue: P>

Pour l'amour de tout ce qui est saint dans le monde, ne stockez pas les ensembles de données TISHLE dans une seule colonne de texte p> Je suppose que vous aurez une table qui sera soit P>

              +-------------------------------------+
+---------+   |      Phone                          | 
| Users   |   +-------------------------------------+ 
+---------+   | user_name| phone_number | type      |
| U_name  |   +-------------------------------------+
+---------+


0 commentaires

2
votes

Si vous travaillez avec JSON, il existe des voies plus élégantes que MySQL. Je recommanderais d'utiliser une autre base de données mieux fonctionner avec JSON, comme MongoDB ou un wrapper pour SQL comme Perseee, http: // www .persvr.org / documentation (voir "perstore")


0 commentaires