0

一部のエントリが 1 つのページであり、いくつかのエントリが複数のページにまたがる可能性があるブログ エントリまたはページ コンテンツをページ分割するための最適なデータベース戦略は何ですか? 注: コンテンツは、アイテムのリストではなく、記事のようなものになります。

私が現在検討している方法は、すべてのコンテンツを 1 つのテキスト フィールドに格納し、{pagebreak}のようなページ区切りを使用することです。取得時に、コンテンツはページ セパレータによって配列に分割され、ページには適切なインデックスが表示されます。これが最善の方法ですか、それともより良いアプローチがありますか?

4

5 に答える 5

2

簡単な方法 (今は、後で支払います) は、記事全体を 1 つのテキスト フィールドに格納することですが、そのテキストに html を配置する必要がある場合があるため、一部の表示制御を放棄します。テキストに html を挿入すると、Web ページのルック アンド フィールを変更した場合に、多くのデータを修正する必要があります。これは問題ではないかもしれません

原則として、html をデータベースに入れないようにしています。 XML を使用して記事を定義し、それを 1 つのテキスト フィールドに格納すると、アプリケーションがコンテンツを動的に適切にレンダリングできるようになります。改ページを XML に保存するか、アプリに記事全体を読み込ませて、現在のルック アンド フィールに基づいて動的に分割することができます。

XML を使用したくない場合は、私の「貧乏人の CMS」スキーマ (以下) を使用できます。「すべてのテキストを 1 つのフィールドに」する方法よりも、書式設定をより詳細に制御できます。

これらはあなたの質問に基づいた単なる推測です

テーブル:

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)

記事全体を 1 つのフィールドに入れることもできますが、異なる種類の「もの」が含まれている場合は分割することができます。

例を含む PHP コードに関する記事がある場合、「1 フィールド メソッド」では、テキストに html を挿入してコード例をフォーマットする必要があります。このモデルでは、何が何であるかを保存し、アプリケーションに適切に表示させます。さまざまなタイプを追加および展開したり、改ページを挿入したり、削除したりできます。それぞれ改ページを表す複数の「ArticleContentText」行にコンテンツを格納するか、改ページを指定する「ArticleContent」行を含めることができます。アプリに記事全体を読み取らせてから、必要なものだけを表示させることができます。

于 2009-04-23T14:09:37.013 に答える
2

あなたの現在の考えが最良の選択肢だと思います。必要に応じて改ページを移動したり、最初に記事を作成するときに改ページを入れたりするのがずっと簡単になります。また、記事全体が 1 つのフィールドにある印刷ページ オプションを使用することもできます。

于 2009-04-23T13:31:58.213 に答える
1

正しいアプローチはあなたが言及したことだと思います.エントリは単一のエントリとしてデータベースに保存する必要があり、マークアップ/UIレイヤーを使用して改ページやその他のフォーマットが発生する場所を決定できます.

データベースの設計は、UI の概念の影響を受けるべきではありません。将来的に表示方法を変更する可能性があり、データベースの一貫性が必要になるためです。

于 2009-04-23T13:32:45.807 に答える
0

このような書式設定はクライアント側に残しておく方がはるかに優れています。データベースにデータを保持させ、アプリケーションがそれを正しい形式でユーザーに提示します。

于 2009-04-23T13:32:06.463 に答える
0

私には良い解決策のように思えます。このようにして、記事をまとめて、必要に応じてページ付けすることができます。

于 2009-04-23T13:32:36.370 に答える