2012-01-06 5 views
3

페이지 내용을 편집 할 CMS를 구축 중입니다. 가능한 한 유연하게 만들고 싶습니다. 각 페이지마다 가변 길이의 섹션이 포함되어 있습니다. 내가 거기에 반복되는 많은 양의 데이터가 그것을 밖으로 특정 데이터를 가져 할 수있는 이상적인 방법이 아니다 실현 될 때까지 CMS 용 데이터베이스 구조

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

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

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

내가,이 구조가 잘 작동 생각 :

현재, 나는 다음 있습니다.

예를 들어 표 page_section_subname 필드는 양식의 필드 레이블을 저장하기위한 것입니다. 다음은 샘플 데이터는 다음과 같습니다

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 자신의 관련을 표시합니다. 이것은 매우 지루한 것으로 입증되고 있습니다.

"제목", "첫 단락"및 "두 번째 단락"에 대해 별도의 열이있는 다른 테이블을 만들 수 있음을 알고 있지만이 시스템을 유연하게 사용하고 여러 열을 고려해야합니다.

이 데이터를 프런트 엔드에 쉽게 출력하고 백 엔드에서 수정할 수 있도록이 데이터베이스의 구조를 어떻게 개선 할 수 있습니까?

편집 : 이것은 내 프런트 엔드에서 수행 할 작업입니다 :

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

그러나 백 엔드에서 그 실제 $ 행 열이 테이블에 존재하지 않는 물론 ..의 그러나 나는 필요 한 페이지에서 위의 11 개의 행을 편집 할 수 있어야합니다.

+1

그냥 팁 ... 몽고 DB와 같은 비 관계형 데이터베이스를 보면 극단적 인 속도와 유연성을 제공합니다. 콘텐츠가 적합해야합니다. – jribeiro

답변

3

설명에서 '페이지'와 '콘텐츠'로만 설명 할 수 있습니다. 왜 'section_sub'을 가지고 있는지 확실하지 않습니다.

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

Content: 
    Content ID 
    Content Heading 
    Content Text 

각 내용 행은

편집 등은 "제목", "글꼴"에 대한 열 수 : 예제 데이터 이제

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 

임이보고 있음을 - 내가 가지고있는 방법을 (페이지 테이블의 여러 ContentID 섹션이있는) 최상위 - NoSQL 솔루션입니다. 다음과 같이 테이블을 추가하여 MySQL의 용액에 같은 일을 수행 할 수 있습니다 : 당신이 선택한 것

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 
    ContentID 
    PageOrder 

항목이 같은 특정 페이지가 될 것이다 구축 PageContent에 조인 된 PageId가 PageOrder에 의해 Content 자체에 조인되었습니다.

+0

안녕하세요 ethrbunny, 답장을 보내 주셔서 감사합니다. 이것이 어떻게 작동하는지 예를 들어 주시겠습니까? (내 샘플 데이터 사용) – GSTAR

+0

예를 보여주기 위해 편집 됨 – ethrbunny

+0

건배, 나는 이것을 시도하고 어떻게되는지 알려주지 :) – GSTAR