2011-07-26 8 views
1

愚かなタイトルのために申し訳ありませんが、私はこの質問に名前を付ける方法が他に知りません:)「コンテンツタイプ」データベースフィールド

だから私はにデータを格納する非常に単純なコンテンツ管理システムを構築しようとしていますデータベース。

データタイプの1つは「コンテンツタイプ」です(WordPressの投稿/カスタム投稿タイプに似ています)。ページ、車のリスト、コメント、本商品など

は、各コンテンツタイプは、独自のフィールドがあります。

コンテンツタイプは何でもすることができます。例えば:タイトル、テキスト:

  • ページがあります。
  • リストがあります:作る、モデル、タイプ、年、価格、...
  • ブックがあります:タイトル、著者、価格

のように...

考えられるのは、これらのコンテンツタイプが動的であることです(フィールドも同様です)。それらはCMSの拡張機能によって追加されます。内蔵の唯一のコンテンツタイプはページです。

とにかく、データベーステーブルを設定する方法についてアドバイスが必要です。これはメインのCMSから行うべきであり、CMS APIを使用して非常に書きやすいようになっている拡張機能からではありません。

特定のコンテンツタイプフィールドに基づいた検索結果が非常に高速になるように、テーブル/テーブルフィールドを設定するにはどうすればよいですか?

WPは、フィールドに対して異なるテーブルを使用し、それらが接続されているポストを指し示すIDを持つ行として格納します。しかし、あなたが複数のフィールドを検索しているとき、これはかなり遅いです...

+0

CouchやMongoのような非リレーショナルデータベースは本当に輝きます。 –

答えて

1

さまざまなオプションがあります。

最も一般的なのは、コンテンツアイテムの横に「キー/値」のペア(WPモデルと思われます)を格納することです。このモデルには多くの問題があります。検索時のブール論理が理解不能になり、コード内でコンテンツタイプを簡単に定義および検証することはできません(たとえば、「すべてのCARコンテンツタイプには属性エンジンサイズが必要です」など)。コンテンツタイプの作成と変更が容易です。

もう1つのモデルは、コンテンツタイプに基づいてデータベーステーブルを生成することです。通常は、「ベース」コンテンツアイテムをルートとして使用します。データベーステーブルをモデル化する方法(「UMLとパターンを適用する」)に関するLarmanの本の良い議論があります。この設計では大量のハウスキーピングコードが作成されます。データベーステーブルの作成と変更は苦労しますが、多くのコンテンツタイプが必要になるソリューションではこれをお勧めしません。

私が見てきた最も堅牢なソリューションは、XMLを使用してコンテンツを格納します。多くの場合、データベース内に格納されます。 XMLでは、(DTDまたはスキーマを使用して)コンテンツタイプを定義し、それを検証/照会することができます。しかし、それはSQLほど高速ではありません...

1

idは、4つのテーブルを持つ構造を必要とするNeville Kの最初のソリューションです。
contents,
content_properties_name,
content_properties_valuesがあり、contents_properties (content_id , content_property_id , content_value_id)に参加しています。

速い検索クエリは少し複雑です

関連する問題