我正在构建用于编辑页面内容的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行。
答案 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排序。