数据库设计:将博客条目拆分为多个页面

时间:2009-04-23 13:28:03

标签: database pagination

对博客条目或页面内容进行分页的最佳数据库策略是什么,其中某些条目可能是单个页面,而某些条目可能跨越多个页面?注意:内容将是文章而非项目列表。

我目前正在考虑的方法是将所有内容存储在单个文本字段中,并使用 {pagebreak} 等页面分隔符。检索后,页面分隔符将内容拆分为数组,然后页面将显示相应的索引。这是最好的方法,还是有更好的方法?

5 个答案:

答案 0 :(得分:2)

我认为你目前的想法是最好的选择。如果您愿意,可以更轻松地移动分页符,或者在您最初撰写文章时将其放入。还允许您使用打印页面选项,整个文章位于1个字段中。

答案 1 :(得分:2)

简单的方法(现在,但稍后会付费)是将整篇文章存储在一个文本字段中,但是您放弃了一些显示控件,因为您可能需要在该文本中放置一些html。如果你在文本中加入html,如果你改变了网页的外观,你将需要修复大量的数据。这可能不是问题

作为一项规则,我尽量不要将html放入数据库。您可能最好使用XML来定义文章,并将其存储在一个文本字段中,以便您的应用程序可以正确呈现内容以动态的方式。您可以在XML中存储分页符,或者让应用程序在整篇文章中阅读,并根据您当前的外观动态将其拆分。

如果您不想使用XML,可以使用我的“穷人的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”行。您可以让应用阅读整篇文章,然后只显示它想要的内容。

答案 2 :(得分:1)

我认为正确的方法就是您所提到的:条目应作为单个条目存储在数据库中,然后您可以使用标记/ UI层来确定应该在哪里进行分页或其他格式化。

数据库设计不应受UI概念的影响 - 因为您可能决定改变它们的显示方式,并且您需要数据库保持一致。

答案 3 :(得分:0)

你最好在客户端留下这样的格式。让数据库保存您的数据,您的应用程序以正确的格式将其呈现给用户。

答案 4 :(得分:0)

在我看来,这是一个很好的解决方案。通过这种方式,您可以将您的文章作为一个整体,并且在必要时可以对其进行分页。