0

私はデータベースに不慣れで、mySQLを学び、Javaのドライバーを使用してサーバー側のデータベースに接続する前に、まずデータベースの設計を理解したいと思いました。データベースには、CRNNUMBERとDEVICE_TOKENの2つの列があります。CRN番号は5桁の文字列になり、DEVICE_TOKENは文字列デバイストークン(プッシュ通知用のiOSデバイストークン)になります。私がやろうとしていることを説明しようと思います。ユーザーにiOSアプリからサーバーデータを送信してもらいます。主に、プッシュ通知用のデバイストークンと、視聴したいCRN(コース)です。同じCRN番号を監視することを要求する多くのデバイストークンがあります。これらをデータベースに保存する最も効率的な方法を知りたかったのです。1つのスレッドでDB内のすべての行を調べ、各CRNについてWebサイトをポーリングします。探しているイベントが発生した場合、このCRNに関連付けられているすべてのデバイストークンに通知したいと思います。最初は、1つの列をCRNにし、もう1つの列をDEVICE_TOKENSにする必要がありました。これは不可能であり、各列は1つのエントリにのみ対応する必要があることを学びました。誰かが私がこのデータベースを設計するための最良の方法を見つけるのを手伝ってくれるでしょうか、それが最も効率的でしょう?

CRN     DEVICE_TOKEN

12345   "string_of_correct_size"
12345   "another_device_token"

同じCRNについてWebサイトに複数の要求を行う代わりに、反復ごとに一意のCRNごとにWebサイトをポーリングしてから、すべてのデバイストークンに変更を通知する方がはるかに効率的です。この情報をどのように保存すればよいですか?御時間ありがとうございます

4

2 に答える 2

3

これを行う最も通常の方法は、デバイストークンからの外部キーを使用してコースを正規化することです。例:2つのテーブル:

Courses
id    CRN
1     12345

InterestedDevices
id    course    DEVICE_TOKEN
1     1        "string_of_correct_size"
2     1        "another_device_token"

次に、次のようなSQLを使用して関心のあるデバイスを見つけることができます。

SELECT *
FROM Courses
JOIN InterestedDevices ON Courses.id = InterestedDevices.course
WHERE Courses.CRN = ?

これにより、コース情報が何度も重複するのを防ぐことができます。

于 2012-11-17T23:57:34.920 に答える
3

1対多の関係(多くのDevice_Tokenを持つ1つのCRN)があるこのタイプの問題では、新しいCRNごとに一意のIDが割り当てられるCRNを格納するための個別のテーブルが必要です。次に、一意のID、CRN、およびDEVICE_TOKENの列を持つ関連するDEVICE_TOKENS用に別のテーブルを作成する必要があります。

このスキーマを使用すると、CRNテーブルの行を調べ、各CRNに対してポーリングし、DEVICE_TOKENテーブルを使用して単純なJOINを実行するだけで、変更が発生した場合にサブスクライブされたすべてのデバイスを見つけることができます。

于 2012-11-18T00:03:20.713 に答える