0

ですから、私はこの主題の範囲内のデータベースに不慣れであり、私が確信していることについてのアドバイスを探しています。まず、MySqlをデータベースとして使用しています。現在、ユーザーアカウントと詳細を保存するための2つのテーブルがあります。

TABLE user
id | username | password | email_address | user_devices | contact_method

もう1つは、プロデューサーによるビデオコンテンツの保存用です。

TABLE series
id | series_title | still_broadcasting | last_updated |

ユーザーが新しいリリースが利用可能になったときに通知を受け取るシリーズを選択し、これらのリリースについて通知する方法(電子メールまたはプッシュ通知)と通知する頻度(到着時に)を選択できる機能を実装したいと思います、毎時、毎日、毎週)これを行うための最善の方法は何ですか?

私はこれらのアイデアを自分で考えましたが、セカンドオピニオン/より良い方法を探しています:(すべてのアイデアから4を引いたものは、ユーザーに通知する方法と頻度をユーザーテーブルに保存することを含みます)

  1. 次のように呼ばれるユーザーテーブルにテキスト列を追加し、各シリーズのcsvを取得します
  2. シリーズごとに1つずつ、ユーザーテーブルに複数のブール列を追加します
  3. シリーズに続くユーザーのID番号のcsvを使用してシリーズテーブルにテキスト列を追加する
  4. 通知用のまったく新しいテーブルを作成しますが、これの目的は非常に冗長であるとは思いません。

次に、サーバーにcronジョブを追加して、実際に定期的にユーザーに通知を送信することを計画しています。

助けてくれてありがとう。

4

3 に答える 3

1

もし私があなたなら、次のように3番目のテーブルを追加します。

TABLE user
id | username | password | email_address | user_devices | contact_method |notification_type

TABLE series
id | series_title | still_broadcasting | last_updated

TABLE followings
id | user_id | series_id

私はnotification_typeに(到着時、毎時、毎日、または毎週)入れますが、次の表に、ユーザーが好むすべてのシリーズを保存します。

このようにすると、すべてのユーザーの好みのシリーズを簡単に追加、削除、更新、または選択できます。すべて単純なSQLクエリになります。また、コンマで区切られた文字列の解析は避けてください。

たとえば、ユーザーのすべての優先シリーズを取得する場合:

SELECT * FROM followings AS f INNER JOIN series AS s ON f.series_id = s.id WHERE f.user_id = ? 

シリーズを好むすべてのユーザーを取得したい場合:

SELECT * FROM followings AS f INNER JOIN user AS u ON f.user_id = u.id WHERE f.series_id = ? 
于 2013-03-27T10:58:30.983 に答える
1

まず第一に、基本的なデータベース設計に関するいくつかの記事を読む価値があるかもしれません。簡単なグーグルがこれを明らかにし、関係の特定をカバーしています

http://www.datanamic.com/support/lt-dez005-introduction-db-modeling.html

あなたの最善の策は、リンクテーブルを使用することです。

CREATE TABLE userHasSeries (
    userID INT,
    seriesID INT 
);

次に、これをINNER JOINクエリで使用して、ユーザーの選択肢を取得できます。ここで行っているのは、2つのテーブル間のn:mリンクです。内部結合の例は次のようになります

SELECT
    u.id AS userID,
    u.username,
    s.seriesID,
    s.series_title,
    s.still_broadcasting,
    s.last_updated
FROM users AS u
INNER JOIN userHasSeries AS uhs
    ON uhs.userID = u.id
INNER JOIN series AS s
    ON s.id = uhs.seriesID

users.user_devicesもコンマ区切りのリストである場合は、同様のn:mアプローチを採用することを強くお勧めします。

于 2013-03-27T10:58:59.690 に答える
1

他の回答に書かれていることを補完する部分的な回答:

'user_devices'フィールドにデバイスのリストを保持しないでください-これを別のテーブルに分割します。実際、2つのテーブルが必要になります。1つはさまざまなデバイスを一覧表示するためのもので、もう1つはuser_idとdevice_idの2つのフィールドを持つ結合テーブルです。これにより、どのユーザーがどのデバイスを持っているかを追跡できるだけでなく、デバイスごとのユーザーのリストを提供することもできます。

于 2013-03-27T11:17:46.270 に答える