2

私は構築しようとしています (今は関係を考えたり、計画したり、描いたりしています :] ) 基本的なウェブサイトを構築するための小さなモジュラー システムを構築しようとしています (ほとんどの場合、ウェブ デザイナーが日常的に行う一般的なタスクを簡素化するためです)。

私は、データベースの設計やコンテンツの保存に関する全体的なアイデアにほとんどこだわっていませんでした。

1.、ほとんどのウェブサイトで(私の経験から)最も苦痛なのは、タイトル、写真、一連の情報など、異なる情報を持つ、ほぼ同じレイアウト/スケルトンのページですが、cmsで特別なテンプレート/特別なモジュールを作成することですたまたまテキストとして編集するよりも多くのエネルギーが必要です - ただし、ここでは運用上の可能性をいくらか失います - 「タイトルのみ」を取得することはできません。CMS/システムはコンテンツ全体を 1 つのテキストフィールドとして理解するためです

したがって、この 2 つのテーブルを作成したいと思います - 1 つはコンテンツの構造に関する情報を保持します (例: 可変量の写真 <1;500) :]、タイトル & テキスト & 写真 (大) & ギャラリー) - HOW - ともう 1 つ「コレクション」のすべてのコンテンツ、モジュール、およびパーツを含むテーブル (さまざまな構造化された情報の私の作業名) - WHAT

table module_descriptors (HOW)  
id int  
structure - *???*  

table modules (WHAT)  
id int  
module_type - @link to module_descriptors id
content - *???*  

2.、これについて私が気に入っているのは、-多くのテーブルは必要ありません-モジュールごとに1つずつ、説明のために、その他のために、6810のテーブルを持つデータベースが好きではありません。数字とテキストの関係、...そして、、、、のような60列のテーブルも好きではありcontent_usませcontent_itん。category_idparent_id

構造の説明とコンテンツ自体 ( ??? ? に注意) を XML または CSV として保持できると考えていますが、車輪を再発明しようとしているのかもしれません。これに対する答えは、私が持っている設計パターンに隠されています。調べました。

私がなんらかの意味をなして、いくつかの返事を得ることを願っています - あなたの意見、長所、短所を教えてください... または私を地獄に送ってください. ありがとうございました

編集:私の質問もこれです:このアプローチは理にかなっていますか? 編集しやすいですか?もっといいものはないの?それは道徳的ですか?私がこれをしても子猫は死にませんか?DB から引っ張ってきた 30 個の XML を読み込んで比較したい場合 (たとえば、何かを比較したい場合)、サーバーにとっては多すぎませんか? 技術的な部分 - それを行う方法 - は質問の一部にすぎません:)

4

1 に答える 1

1

あなたが示唆している設計パターンはSerialized LOBと呼ばれます。すべてのエントリで同じ属性に対して、一部のデータを従来の方法 (列として) で格納できます。変数の属性については、XML や MarkDown など、必要に応じてフォーマットし、TEXT BLOB に格納します。

もちろん、SQL 式を使用して BLOB 内の個々の要素をクエリする機能は失われます。検索や並べ替えで使用する必要があるものはすべて、従来の列に配置する必要があります。


再コメント: テキスト blob が XML 形式の場合、MySQL 5.1 以降でサポートされているXML 関数を使用して検索できます。しかし、これはインデックスの恩恵を受けることができないため、検索が非常に遅くなります。

LIKEまたはRLIKEワイルドカードを使用しようとする場合も同様です。インデックスを使用しない場合、検索は完全なテーブル スキャンになります。

MySQL FULLTEXTインデックスを使用することもできますが、テキスト コンテンツと XML タグ名および XML 属性の違いを見分けることができないため、これは XML データの検索には適していません。

そのため、検索またはソートするフィールドには従来の列を使用してください。その方が幸せになれます。


再質問: ドキュメントが本当に可変構造を必要とする場合、選択肢はほとんどありません。適切に使用すると、SQL はすべての行が同じ構造 (つまり、列) を持っていると想定します。あなたの選択肢は次のとおりです。

Entity-Attribute-Value (EAV) と呼ばれるアンチパターンを使用して変数属性を格納する人もいますが、正直なところ、そこには行きません。これがどのようにうまくいかないかについては、次の記事をお読みください: Bad CaRMa .

于 2010-01-25T22:13:05.110 に答える