2012-01-08 12 views
2

ブログを保持するテーブルが1つあるとします。データベースフィールドのXMLSerializedオブジェクト。それは良いデザインですか?

フィールド画像で
ID (int)| Title (varchar 50) | Value (longtext) | Images (longtext)| .... 

私はブログに関連付けられている画像のXML直列化されたリストを格納します。 スキーマは次のようになります。

この目的のために別のテーブルを使用する必要がありますか?

+1

画像の実際の画像やURLのリストはありますか? –

+1

URLと各画像のディレクトリ。 – Sanosay

答えて

2

はい、画像を別のテーブルに配置する必要があります。同じフィールドに複数の値を指定すると、非正規化されたデータが表示され、データベースでの作業が難しくなります。

すべてのルールと同様に、複数の値を持つXMLをデータベースの1つのフィールドに入れることは意味があります。

データが一緒に書かれ常に読み取り/すべきである:最初のルールは、ということです。値の1つだけを読み込んだり更新したりする必要はありません。

  • ストレージ効率を、スペースが問題であることが証明された場合:それが満たされた場合

は、多くの理由が一つのフィールドで一緒にデータを置くことができます。

  • パフォーマンスが問題であると判明した場合の検索効率。
  • スキーマflexilibity; 1つのXMLフィールドで数十または数百の異なる表を排除できます。
  • 1

    実際の画像データ自体を照会する必要があるかどうかによって異なります。特定の画像や特定の属性を持つ画像を照会する必要がある場合は、その画像データを別の方法で保存するのが最善でしょう。

    それ以外の場合は、そのままにしてください。

    ただし、必要に応じてSELECTにフィールドを含めてください。

    2

    私は確かに別のテーブルを使用します。 XMLを使用している場合、すべてのイメージへの参照を参照して更新する必要がある場合はどうなりますか? (あなただけではなくUpdate blog_images Set ...を行う、または各行に対してXMLを解析、更新になるだろうし、

    0

    は、私は、この目的のために別のテーブルを使用する必要がありますか?それぞれの更新されたXMLを再生成?

    必須ではありませんが、不要なときにクエリの画像フィールドを選択しないようにするだけです。ただし、スキーマを非正規化したい場合は、別のテーブルを使用することができます。 a join

    2

    これはちょっと「内部プラットフォーム」ですが、それはうまくいくでしょう。一部のRDBMSプラットフォームでは、XML型の列とSQL/XMLを使用してこれを実現することもできますが、別の表を使用するとイメージの問合せが改善されます。

    このデータが不透明なストレージである必要がある場合は、おそらく多分です。しかし、一般的には、XML全体をアプリケーション層に戻して面白いことをする必要があります(または、プラットフォームによってはSQL/XMLを使用しますが、DBとは異なり、ほとんどの場合、そのような処理を行う場所)。

    他のすべてのケースで私の助言:別表

    関連する問題