1

写真管理システムを XML から MySQL に移行し、現在のシステムの機能を拡張したいと考えています。

基本的に、MySQL と xml ファイルにはほとんどありません。現在の状況は次のようになります。

  • " news.xml " - 単一のファイル:
    サイト上のすべてのニュース (新しいアップロード、投票、コメント) が保存されており、xml の構造は次のとおりです。

    <all_news>
        <photos>
            <image image_name="photo1.jpg" path="my_photos/" date="12.12.12" info="just Uploaded!" />
        </photos>
        <comments>
            <image image_name="photo1.jpg" path="my_photos/" date="12.12.12" info="just Commented!" />
        </comments>
        <votes>
            <image image_name="photo1.jpg" path="my_photos/" date="12.12.12" info="just Voted!" />
        </votes>
    </all_news>
    
  • " photo1.xml "、" photo2.xml "、" photo3.xml " ... - 複数のファイル:
    これらのファイルは、誰かが私の写真にコメントを残すと動的に作成されます。たとえば、誰かが私の写真にコメントすると、php スクリプトは自動的に「photo_name.xml」ファイルを次の形式で作成します。

    <comments>
        <comment sender='John' text='nice photo!' who='user' date='22.12.12'/>
    </comments>
    
  • "投票" - MySQL テーブル:
    すべての投票が保存され、テーブルの構造:

    • id: "photo1.jpg"
    • vote: 5
    • uid: "IP voting person"

これらすべてを単一の mySQL データベース テーブルにマージしたいので、写真がロードされるたびに、単一の DB テーブルからこれらの写真情報を取得します (いくつかの xml と DB を同時にロードするのではなく)...

だから私の質問は次のとおりです。
この状況で最も簡単に作業するには、どのテーブル構造が最適ですか (データのプル、移動、削除、編集、追加、並べ替え...)? 一意の id = "photo.jpg"と多次元配列
を使用して、単一のファイルのすべてのものを単一の行に保持する必要がありますか? 例えば:

uid:            photo_name.jpg
path:           my_photos/
isNewPhoto:     array[true, array[info:"just uploaded!"][date:"12.12.12"]] (multi-dimensional array ??)
isNewComment:   array[true, array[info:"just commented!"][date:"12.12.12"]] (multi-dimensional array ??)
isNewVote:      array[true, array[info:"just Voted!"][date:"12.12.12"]] (multi-dimensional array ??)
votes:          1,5,3,2
votesIP:        123123123,123123123,123123123
comments:       array[array[sender][comment][date][who]]] (multi-dimensional array ??)
4

1 に答える 1

3

コンテンツを単一の列に格納する前に配列をシリアル化すると、実際には非常に簡単に実行できます。それが良い考えであるかどうかは別のことです。パフォーマンスの問題は別として、単一の属性の検索など、より複雑なものを作成する機会を与えます。

なぜあなたは単一のテーブルを主張するのですか?複数のテーブルを使用している場合でも、単一のクエリで複数のテーブルエントリから結合された単一のエントリを取得できます。これにより、さらなる拡張やユースケースに対応できる柔軟性が大幅に向上します。

于 2012-07-13T15:40:19.093 に答える