CMS的数据库结构

时间:2012-01-06 12:04:33

标签: php mysql

我正在构建用于编辑页面内容的CMS。我想尽可能灵活,因为每个页面都包含可变数量的部分。

目前,我有以下内容:

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

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

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

我认为这种结构运行良好,直到我意识到存在大量重复数据并且它不是将特定数据拉出的理想方式。

例如,表name中的page_section_sub字段用于存储表单的字段标签。以下是一个示例数据:

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           ...

现在在前端我想显示上表中的3张幻灯片及其相关的content。事实证明这非常繁琐。

我知道我可以为“Heading”,“First Paragraph”和“Second Paragraph”创建另一个包含单独列的表,但正如我所提到的,我需要这个系统是灵活的,并考虑到任意数量的列。< / p>

如何改进此数据库的结构,以便我可以在前端轻松输出这些数据,并在后端修改它?

编辑:这是我想要在前端做的事情:

<?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 } ?>

但是当然这些实际的$ row列在表中不存在。但是在后端我需要能够在一个页面上编辑上面的11行。

1 个答案:

答案 0 :(得分:3)

根据您的描述,您似乎只能通过“网页”和“内容”来实现。我不知道为什么你有'section_sub'。

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

Content:
   Content ID
   Content Heading
   Content Text

每个内容行可以包含“show heading”,“font”等的列

编辑:示例数据

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

现在我正在看这个 - 我在顶部的方式(在Page表中有多个ContentID部分) - 更像是一个NoSQL解决方案。您可以通过添加如下表来完成MySQL解决方案中的相同操作:

  PageContent:
    PageID
    ContentID
    PageOrder

构建特定页面的条目如下:

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

要构建一个特定页面,您要为加入PageContent的PageId选择该页面,然后加入内容本身并按PageOrder排序。