2017-12-26 46 views
1

私は記事を含むウェブサイトを構築しています。これらの記事はユーザーがログインするまで表示されません。 2つのボタンを追加する予定ですが、最初のものは「この記事に従います」と呼ばれ、2番目のボタンは記事をお気に入りにするためのものです。私の質問はどのように私のデータベースでそれを構造化できますか?私のウェブサイトのユーザーの行動を保存するために私のDBを構造化する方法(follow、favorite ...)

私はちょうどid_articleid_userfollowed(1 or 0)favourite (1 or 0)を含むテーブルを追加したり、私はより多くのメモリ空間を節約しましょうだろう別の解決策はありますでしょうか?

注:私のウェブサイトには多くのユーザーが訪れる記事がたくさんあります。

+1

お勧めのデザインは良いです。記事からユーザへの記事は、多対多(あなたの説明からわかるように)であり、それに続く場合にのみ記事をお気に入りにすることができます。この関係表のサイズは、記事のサイズに比べて小さいでしょう、確かに?ではなぜそれについて心配ですか?何件の記事やユーザーがいると思われますか? –

+0

あなたの答えをありがとう、私は可能な限り最適化されたソリューションを見つけるために飛び回っていました。 –

+0

どのブランドのデータベースを使用していますか?大手のすべての人は、これらのボリュームを問題なく扱います。私はラップトップの最大のテーブルに数百万行のデータベースを持っています。うまくいけば、私のラップトップよりも容量の大きいUNIXサーバを使用することになります。私のテーブルはあなたの関係テーブルよりもはるかに広く、うまく動作します。あなたが100万の関係を持ち、idが整数で、 "follow"と "favorite"が1バイトの場合、10MBのデータが得られます。それはほとんどの場合記憶に残るでしょう。 –

答えて

0

2つの別個の関係をarticles_followed (id, id_article, id_user)articles_favourite (id, id_article, id_user)とする。 (いくつかの点で)データベースをシャーディング

    • 各関係について、具体的な新しい属性を追加する:これはで、あなたに十分な柔軟性を与えるだろう、そうでないので、別の1つのリレーションを移動させることが容易になるだろうお互いに依存し、
    • 同時更新:あなたは、これら二つ上の別々のロックを使用することができ、加えて、あなたがトランザクションの可視化、
    • と少ないの問題があるでしょう、あなたはis_followedis_favouriteフラグを維持する必要はありませんがあるかどうエントリがある場合、それは記事が続いていることを意味します(一度アンフォローされると、単に行を削除します)

    ドメインクラスの構造について考えてみましょう。どちらのオプションでコードするのが簡単でしょうか?私は、2つの別個の関係の場合には、より明確になると思う。

  • +1

    記事が好きでなくても、好きでなくてもそれに従うことができれば、私は2つの関係テーブルが良いと同意します。あなたが必要ではない属性を追加しないでください。日付を気にしない場合は、日付を含めないでください。それが要件になる場合は、いつでも後で追加することができます。 –

    +0

    合意済み@Ron Ballard、私はデフォルトでは必要ないので、日付を削除しました。 – sainr

    +1

    あなたのお手伝いが大変ありがとうございます...私は2つのテーブルを作成するのが最適な解決策だと思っています。 –

    関連する問題