0

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

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

4

5 回答 5

2

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

于 2009-04-23T13:31:58.213 回答
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”行。您可以让应用阅读整篇文章,然后只显示它想要的内容。

于 2009-04-23T14:09:37.013 回答
1

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

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

于 2009-04-23T13:32:45.807 回答
0

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

于 2009-04-23T13:32:06.463 回答
0

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

于 2009-04-23T13:32:36.370 回答