PHP / conception de base de données MySQL pour divers contenus / variables - système modulaire

StackOverflow https://stackoverflow.com/questions/2135978

Question

Je suis en train de construire (en ce moment juste à y penser / planification / relations dessin:]). Petit système modulaire pour construire des sites Web de base (principalement pour simplifier les tâches courantes comme nous webdesigners font régulièrement)

Je me suis peu coincé avec la conception base de données / idée de stockage de contenu.

1, Ce qui est le plus souvent douloureux sur la plupart des sites (de mon expérience), sont des pages avec quasi même mise en page / skelet, avec des informations différentes -. Par exemple Titre, image, et un ensemble d'informations - mais, en faisant des modèles spéciaux / modules spéciaux en cm arrive à coûter plus d'énergie que le modifier comme un texte - mais, ici, nous perdons un potentiel opérationnel - nous ne pouvons pas « seulement les titres », parce que, CMS / système comprend le contenu entier comme un champ de texte

Alors, je voudrais ces deux tableaux - une pour tenir l'information quelle structure le contenu a (par exemple juste quantité variable de photos <1; 500):], le titre et le texte et photo (grand) et galerie) - COMMENT - et une autre table avec tous les contenus, modules et pièces de « collections » (mon nom de travail pour diverses informations structurées) - QU'EST-CE

table module_descriptors (HOW)  
id int  
structure - *???*  

table modules (WHAT)  
id int  
module_type - @link to module_descriptors id
content - *???*  
.

2, Ce que j'aime c'est - je ne ai pas besoin de tables - Je n'aime pas les bases de données avec 6810 tables, un pour chaque module, pour sa description, pour misc. nombre en texte relations, ... et je n'aime pas aussi des tables avec 60 colonnes, comme content_us, content_it, category_id, parent_id.

Je pense que je pourrais tenir la description de la structure et le contenu lui-même (noté ??? ?) En XML ou CSV, mais peut-être que je suis en train de réinventer la roue et répondre à cela est caché dans un certain modèle de conception que je ne l'ai pas examiné.

J'espère que je fais aucun sens et je obtenir des réponses - me donner votre avis, les avantages, les inconvénients ... ou envoyez-moi en enfer. Merci

EDIT : Ma question est la suivante: Est-ce que cette approche a du sens? Est-il modifier convivial? N'y at-il quelque chose de mieux? Est-il moral? Ne pas faire mourir chatons quand je fais cela? Est-il pas trop pour le serveur, si je veux lire et comparer les 30 XMLs de DB tiré (par exemple, je veux comparer quelque chose)? La partie technique - comment le faire - est juste une partie de la question:)

Était-ce utile?

La solution

Le modèle de conception que vous laissant entendre que l'on appelle sérialisé LOB . Vous pouvez stocker des données de façon classique (comme colonnes) pour les attributs qui sont les mêmes pour chaque entrée. Pour les attributs qui sont variables, les formater au format XML ou MarkDown ou tout ce que vous voulez, et le stocker dans un blob TEXT.

Bien sûr, vous perdez la possibilité d'utiliser des expressions SQL pour interroger des éléments individuels au sein du blob. Tout ce que vous devez utiliser dans la recherche ou le tri devrait être dans les colonnes classiques.


Re commentaire: Si votre blob texte est en format XML, vous pouvez rechercher avec fonctions XML pris en charge par MySQL 5.1 et versions ultérieures. Mais cela ne peut pas bénéficier d'un indice, il va conduire à des recherches très lentes.

La même chose est vrai si vous essayez d'utiliser LIKE ou RLIKE avec des jokers. Sans l'aide d'un index, les recherches aboutiront à plein-scans tableau.

Vous pouvez également essayer d'utiliser un FULLTEXT index, mais ce n'est pas une bonne solution pour la recherche de données XML, car il ne sera pas en mesure de faire la différence entre le contenu du texte et les noms de balises XML et les attributs XML.

Il suffit donc d'utiliser des colonnes classiques pour tous les champs que vous souhaitez rechercher ou trier par. Vous serez plus heureux de cette façon.


Re question: Si vos documents nécessitent vraiment la structure variable, vous avez peu de choix. Lorsqu'il est utilisé correctement, SQL suppose que chaque ligne a la même structure (qui est, colonnes). Vos alternatives sont:

Certaines personnes ont recours à une entité appelée antimodèle-Attribute Valeur (EAV) pour stocker des attributs variables, mais honnêtement, ne vont pas là. Pour une histoire sur la gravité de ce qui peut aller mal, lisez cet article: Bad Carma.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top