Quelle est la meilleure façon de mémoriser un champ qui supporte le redressement de ma base de données lorsque je dois afficher les vues HTML et "texte simple"?

J'ai une base de données et j'ai un front-end de site Web. J'ai un champ dans mon front-end qui est du texte maintenant, mais je veux qu'il soit compatible avec le redressement . J'essaie de comprendre que le droit était de stocker dans ma base de données parce que j'ai plusieurs points de vue qui doivent être pris en charge (rapports PDF, pages Web, fichiers excel, etc.)?

Je crains que, puisque certaines de ces vues ne prennent pas en charge le HTML, je ne veux pas seulement avoir une version HTML de ce domaine.

Devrais-je stocker 2 copies (un seul texte et un HTML?), Ou devrais-je stocker du HTML et, en tournant, essayer de supprimer les balises HTML lorsque je rends à Excel par exemple?

Je dois trouver le format correct (ou les formats) à stocker dans la base de données pour être en mesure de rendre les deux:

  • HTML et
  • Texte régulier (sans marge ou syntaxe HTML)

Toute suggestion serait appréciée car je ne veux pas aller sur le mauvais chemin. Mon point est que je ne veux pas afficher de balises HTML ou de syntaxe de réduction dans ma sortie Excel.

Décidez comme ceci:

  1. Stockez les données d'origine (texte avec redressement).
  2. Générer les données dérivées (HTML et texte en clair) à la volée.
  3. Mesurez la performance:
    • Si c'est acceptable, vous avez fini, woohoo!
    • Sinon, mettez en cache les données dérivées.

La mise en cache peut se faire de plusieurs façons … vous pouvez générer les données dérivées immédiatement, et les stocker dans la base de données, ou vous pouvez initialement stocker NULL et faire la génération paresseusement (quand et si cela est nécessaire). Vous pouvez même le mettre en cache hors de la base de données.

Mais quoi que vous fassiez, assurez-vous que le cache n'est jamais «vicié», c'est-à-dire lorsque les données d'origine changent, les données dérivées dans le cache doivent être générées ou au moins marquées comme «sales» de quelque façon. Une façon de le faire est de déclencher.

Vous devez stocker vos données dans un format canonique . C'est-à-dire, dans un véritable format dans votre base de données. Il semble que ce format devrait être une colonne de texte qui contient un redressement. Cela répond à la partie de votre question sur la base de données.

Ensuite, selon le format que vous devez exporter, vous devez prendre le format canonique et le convertir au format de sortie requis. Il est possible de publier uniquement le texte de réduction, ou de l'exécuter dans une sorte d'analyseur pour supprimer le marquage ou le convertir en HTML.

La plupart d'entre eux semblent dire simplement stocker les données sous forme de HTML dans la base de données, puis la traiter pour la convertir en texte brut. À mon avis, il y a des inconvénients à cela:

  1. Vous aurez probablement besoin d'un code d'application pour supprimer le code HTML et extraire le texte brut. Imaginez si vous l'avez fait dans SQL Server. Que faire si vous souhaitez écrire une procédure / requête stockée contenant la version en texte brut? Comment extraire du texte brut en SQL? C'est possible avec une fonction, mais c'est beaucoup de travail.

  2. Le traitement du bloc HTML peut être lent. J'imaginerais pour de petites bannies HTML qu'il sera très rapide, mais il y a certainement plus de frais généraux que de simplement lire un champ de texte simple.

  3. Les analyseurs HTML ne fonctionnent pas toujours bien / ils peuvent être complexes. L'idée est que vos utilisateurs peuvent être très créatifs et insérer des blobs qui ne fonctionneront pas bien avec votre analyseur. Je sais par expérience que ce n'est pas toujours trivial d'extraire le texte brut de HTML.

Je proposerais la plupart des fournisseurs de courrier électronique:

  1. Conservez une version HTML / HTML et une version texte simple. Deux champs dans la base de données.
  2. Comme le cas d'utilisation avec les fournisseurs de courrier électronique, les utilisateurs peuvent vouloir que ces deux champs aient un contenu différent.
  3. Vous pouvez écrire une fonction UI qui permet à l'utilisateur d'entrer en HTML puis la transforme via l'application en version texte. Cela donne à l'utilisateur un bon point de départ et peuvent masser / éditer la version texte brut avant de l'enregistrer dans la base de données.

Je suggérerais de le stocker au format HTML, puisqu'il est le plus riche dans ce cas et de supprimer les tags lors de l'obtention des données pour d'autres formats (PDF, Latex ou autre). Dans la question suivante, vous trouverez un moyen de supprimer facilement les étiquettes.

Expression régulière pour supprimer les balises HTML

De mon point de vue, le stockage des données (originales et déclassées) dans deux champs distincts est un gaspillage d'espace, mais aussi un problème d'intégrité, car l'un des champs pourrait, en principe, être modifié sans changer le second.

Bonne chance!

  1. Conservez toujours la source, dans votre cas, il s'agit d'un redressement.
  2. Enregistrez également les formats fréquemment utilisés.
  3. Utilisez la conversion / le rendu de la demande pour les formats utilisés moins fréquemment.

    Explication:

  4. Toujours avoir la source. Vous pourriez avoir besoin de cela à des fins diverses, par exemple, la même entrée peut être modifiée, piste d'audit, débogage, etc.

  5. Pas de frais généraux pour le processeur / RAM si le même format est fréquemment demandé, vous le commercialisez avec le stockage sur disque qui est bon marché par rapport aux formars.

  6. Frais généraux occasionnels, voir le # 2

Je pense que ce que je ferais – si le stockage n'est pas un problème – serait stocker la version canonique, mais générer automatiquement à partir d'elle, dans des champs informatisés persistants , quelles que soient les autres versions dont on pourrait avoir besoin. Vous souhaitez que les champs soient persisés car il est inutile de faire la conversion chaque fois que vous avez besoin des données. Et vous voulez qu'ils soient calculés parce que vous ne voulez pas qu'ils ne soient pas synchronisés avec la version canonique.

Essentiellement, cela utilise la base de données comme un cache pour les autres versions, mais un cache qui vous garantit l'intégrité des données.