4 votes

Structure de la base de données pour le CMS

Je suis en train de construire un CMS pour l'édition du contenu des pages. J'aimerais qu'il soit aussi flexible que possible, car chaque page contiendra un nombre variable de sections.

Actuellement, j'ai les éléments suivants :

Table page:
===========
id
name

Table page_section:
===================
id
page_id
name
display_order

Table page_section_sub:
=======================
id
page_section_id
name
content

Je pensais que cette structure fonctionnerait bien, jusqu'à ce que je réalise qu'il y a beaucoup de données répétitives et que ce n'est pas la manière idéale d'extraire des données spécifiques.

Par exemple, le name champ dans la table page_section_sub est destiné à stocker l'étiquette du champ du formulaire. Voici un exemple de données :

Table page_section:
===================

id  page_id     name
-----------------------------------------
1   1           Slideshow Slide 1
2   1           Slideshow Slide 2
3   1           Slideshow Slide 3
4   1           Middle Box
5   1           Bottom Box

Table page_section_sub:
=======================

id  page_section_id name                content
------------------------------------------------------
1   1               Heading             ...
2   1               First Paragraph     ...
3   1               Second Paragraph    ...
4   2               Heading             ...
5   2               First Paragraph     ...
6   2               Second Paragraph    ...
7   3               Heading             ...
8   3               First Paragraph     ...
9   3               Second Paragraph    ...
10  4               Image URL           ...
11  5               Image URL           ...

Maintenant, sur l'interface principale, je veux afficher les 3 diaporamas et leur contenu. content du tableau ci-dessus. Cela s'avère être très fastidieux.

Je sais que je peux créer un autre tableau avec des colonnes séparées pour "Titre", "Premier paragraphe" et "Deuxième paragraphe", mais comme je l'ai mentionné, j'ai besoin que ce système soit flexible et prenne en compte un nombre quelconque de colonnes.

Comment puis-je améliorer la structure de cette base de données afin de pouvoir facilement sortir ces données sur le front-end et aussi les modifier sur le back-end ?

EDIT : C'est ce que je veux faire dans ma partie avant :

<?php while($row = mysql_fetch_array($slideshow)) { ?>
<div class="slideshow">
    <h1><?php echo $row['heading']; ?></h1>
    <p class="first"><?php echo $row['first']; ?></p>
    <p class="second"><?php echo $row['second']; ?></p>
</div>
<?php } ?>

Mais bien sûr, ces colonnes $row n'existent pas dans la table Dans le back-end, cependant, j'ai besoin de pouvoir modifier les 11 lignes ci-dessus sur une page.

4voto

ethrbunny Points 5487

D'après votre description, il semblerait que vous puissiez le faire avec seulement "pages" et "contenu". Je ne sais pas pourquoi vous avez la "section_sub".

pages: 
   Page ID
   Content ID
   Content ID
   Content ID
   ...

Content:
   Content ID
   Content Heading
   Content Text

Chaque ligne de contenu pourrait avoir des colonnes pour "afficher le titre", "la police", etc.

EDIT : exemple de données

Content:
    ID0, Slide0 header, slide0 text
    ID1, Slide1 header, slide1 text
    ID2, Slide2 header, slide2 text
    ID3, RepetitiveHeader0, RepetitiveText0
    ID4, Repetitiveheader1, RepetitiveText1
    ID5, RepetitiveHeader2, RepetitiveText2

 Pages:
    Page0, Title0
    Page1, Title1
    Page2, Title2

Maintenant que j'y pense, la méthode que j'utilise en haut de la page (avec plusieurs sections ContentID dans la table des pages) est plutôt une solution NoSQL. Vous pouvez accomplir la même chose dans une solution MySQL en ajoutant une table comme suit :

  PageContent:
    PageID
    ContentID
    PageOrder

Les entrées pour construire une page spécifique seraient comme :

  Page0, ContentID0, (order)1
  Page0, ContentID3, (order)2
  Page0, ContentID4, (order)3
  Page1, ContentID1, (order)1
  Page1, ContentID4, (order)2
  Page1, ContentID5, (order)3

Pour construire une page spécifique, il faut sélectionner le PageId joint au PageContent, puis joint au contenu lui-même et ordonné par PageOrder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X