簡體   English   中英

數據庫的新手,該如何設計? MYSQL和Java

[英]New to databases, how do I design this? MYSQL and Java

我是數據庫的新手,在開始學習mySQL並使用Java驅動程序與服務器端的數據庫進行連接之前,我想首先簡化數據庫的設計。 我在數據庫中有兩列,CRN NUMBER和DEVICE_TOKEN。 CRN號將是一個五位數的字符串,而DEVICE_TOKEN將是一個字符串設備令牌(用於推送通知的iOS設備令牌)。 讓我嘗試描述我要做什么。 我將讓用戶從iOS應用程序發送服務器數據,主要是用於推送通知的設備令牌和他們想要觀看的CRN(課程)。 將有許多設備令牌要求觀看相同的CRN號。 我想知道將這些存儲在數據庫中的最有效方法。 我將有一個線程瀏覽數據庫中的所有行,並輪詢每個CRN的網站。 如果發生了我要查找的事件,我想通知與此CRN相關的每個設備令牌。 最初,我希望一列為CRN,另一列為DEVICE_TOKENS。 我知道雖然這是不可能的,並且每一列應該只對應一個條目。 有人可以幫我找出設計數據庫的最佳方法嗎,那將是最有效的方法?

CRN     DEVICE_TOKEN

12345   "string_of_correct_size"
12345   "another_device_token"

對於我來說,與我對同一個CRN的網站發出多個請求相比,對於我而言,以每次唯一的CRN ONCE每次迭代輪詢網站,然后將更改通知所有設備令牌將更加有效。 我應該如何存儲這些信息? 謝謝你的時間

最普通的方法是使用設備令牌中的外鍵對課程進行規范化。 例如,兩個表:

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 = ?

這樣,您可以避免一遍又一遍地重復課程信息。

在這種類型的問題中,您具有一對多的關系(一個具有許多Device_Token的CRN),您希望有一個單獨的表來存儲CRN,其中為每個新CRN分配了唯一的ID。 然后,應為您的DEVICE_TOKENS制作一個單獨的表,該表具有唯一ID,CRN和DEVICE_TOKEN的相關列。

使用這種模式,您可以遍歷CRN表的行,對每個CRN進行輪詢,然后對DEVICE_TOKEN表進行簡單的JOIN查找所有訂閱的設備(如果發生更改)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM