2009-04-23 4 views
0

블로그 항목 또는 페이지 내용의 페이지 매김을위한 최상의 데이터베이스 전략은 일부 항목이 단일 페이지 일 수 있고 일부 항목은 여러 페이지를 포함 할 수 있습니다. 참고 : 콘텐츠는 항목 목록이 아닌 기사와 유사합니다.데이터베이스 디자인 : 블로그 항목을 여러 페이지로 나누기

현재 제가 고려중인 방법은 모든 텍스트를 단일 텍스트 필드에 저장하고 {pagebreak}과 같은 페이지 구분 기호를 사용하는 것입니다. 검색시, 내용은 페이지 구분자에 의해 배열로 분할되고 페이지는 적절한 색인을 표시합니다. 이것이 최선의 방법인가요? 아니면 더 나은 접근 방법이 있습니까?

답변

2

나는 현재의 아이디어가 최선의 선택이라고 생각합니다. 원한다면 페이지 나누기를 이동하거나 기사를 처음 작성할 때 페이지 나누기를 이동하는 것이 훨씬 쉽습니다. 또한 전체 기사가 1 필드에있는 인쇄 페이지 옵션을 가질 수 있습니다.

+0

페이지 나누기 이동을 고려하지 않았지만 좋은 지적입니다. – VirtuosiMedia

0

클라이언트 측에서 이와 같이 서식을 설정하는 것이 훨씬 좋습니다. 데이터베이스가 데이터를 보유하게하고 응용 프로그램이 올바른 형식으로 사용자에게 제공합니다.

+0

나는 당신의 접근 방식을 잘 모르겠습니다. 당신이 조금 더 생각하고있는 것을 설명해 주시겠습니까? – VirtuosiMedia

+0

내 말은, 당신이 전체 기사를 저장해야한다는 것입니다 (특정 페이지 나누기가 없이는 화면 공간을 보존하기위한 것이 아니라 LOGICAL 이유가 아니라면) 데이터베이스에 클라이언트 코드를 허용해야합니다 (ASP .NET 응용 프로그램)은 데이터를 읽고 페이지별로 데이터를 분할 할 적절한 위치를 결정합니다. 이렇게하면 모든 데이터를 업데이트하지 않고도 코드의 요구 사항 (짧은 페이지 또는 긴 페이지)을 변경할 수 있습니다. –

0

나에게 좋은 해결책이있는 것 같습니다. 이렇게하면 기사를 한 조각으로 만들어 필요할 때 페이지 매기기를 할 수 있습니다.

1

올바른 접근 방식은 언급 한 것과 같습니다. 항목을 데이터베이스에 단일 항목으로 저장하고 마크 업/UI 레이어를 사용하여 페이지 구분 또는 기타 서식을 지정해야합니다.

데이터베이스 디자인은 UI 개념의 영향을받지 않아야합니다. 사용자 인터페이스를 표시하는 방법을 변경하고 데이터베이스의 일관성을 유지해야하기 때문입니다.

2

쉬운 방법 (지금은 나중에 지불 하겠지만)은 하나의 텍스트 필드 내에 전체 기사를 저장하는 것이지만 일부 텍스트를 html로 입력해야하므로 일부 표시 제어를 포기해야합니다. 텍스트에 html을 넣으면 웹 페이지의 모양/느낌을 변경하는 경우 많은 데이터를 수정해야합니다. 이것은 문제가 아닐 수도 있습니다.

일반적으로 나는 html을 데이터베이스에 넣지 않으려 고합니다. XML을 사용하여 기사를 정의하고이를 한 텍스트 필드에 저장하는 것이 더 좋을 수 있으므로 응용 프로그램이 동적으로 내용을 렌더링 할 수 있습니다. XML에 페이지 나누기를 저장하거나 전체 아티클에서 응용 프로그램을 읽고 현재 룩앤필에 따라 동적으로 분할 할 수 있습니다.

XML을 사용하지 않으려면 "poor man 's CMS"스키마 (아래)를 사용할 수 있습니다. "한 텍스트의 모든 텍스트"방법보다 서식을 더 잘 제어 할 수 있습니다.

은 귀하의 질문에 따라

테이블 단지 추측입니다 :

Articles 
-------- 
ArticleID  int --primary key 
ArticleStatus char(1) --"A"ctive, "P"ending review, "D"eleted, etc.. 
ArticleAuthor varchar(100) --or int FK to a "people" table 
DateWritten  datetime 
DateToDisplay datetime 
etc... 

ArticleContent 
-------------- 
ArticleID  int --primary key 
Location  int --primary key, will be the order to display the article content, 1,2,3,4 
ContentType char(1) --"T"ext, "I"mage, "L"ink, "P"age break 


ArticleContentText 
------------------ 
ArticleID  int --primary key 
Location  int --primary key 
FormatStyle char(1) --"X"extra large, "N"ormal, "C"ode fragment 
ArticleText text 

ArticleContentImage 
------------------- 
ArticleID  int --primary key 
Location  int --primary key 
AtricleImagePath varchar(200) 
AtricleImageName varchar(200) 

당신은 여전히 ​​하나 개의 필드에 전체 기사를 넣을 수 있지만 다른 유형을 포함하는 경우 당신은 그것을 나눌 수 있습니다 "소지품".

예제가있는 PHP 코드에 대한 기사가있는 경우 "한 필드 방법"을 사용하면 텍스트에 HTML을 삽입하여 코드 예제의 서식을 지정해야합니다. 이 모델을 사용하면 무엇이 무엇인지 저장하고 응용 프로그램에 올바르게 표시 할 수 있습니다. 다른 유형을 추가 및 확장하고, 페이지 나누기를 삽입하고, 제거 할 수 있습니다. 페이지 나누기를 나타내는 여러 "ArticleContentText"행에 콘텐츠를 저장하거나 페이지 위반을 지정하는 "ArticleContent"행을 포함 할 수 있습니다.앱이 전체 기사를 읽은 다음 원하는 내용 만 표시하도록 할 수 있습니다.

관련 문제