Sql-Server

在標準化以及何時將相似數據放在一起找到平衡

  • October 17, 2021

我正在與使用 OAuth 的服務集成,我需要保存到數據庫的數據非常相似。但是,與前兩種實現方式略有不同。

它們都有一個令牌、過期時間、refreshToken 和 refreshTokenExpiration。但是,一個有一個“realmId”,另一個有一個需要保存的“redirectUri”。

在我看來,我有 3 個選擇:

a) 將 realmId 和 redirectUri 添加到同一個表中,一個將被填充,另一個為空,具體取決於正在使用的服務。當然,誰知道我是否必須在添加更多具有不同要求的服務時繼續添加其他列?

b) 規範化數據,使得相似數據有一個表,但單獨的表保存每個服務的唯一數據,並具有與具有相似令牌數據的表的外鍵。

c) 甚至不必費心將相似的數據儲存在單個表中。而是為每個服務創建一個完全獨立的表。

作為一個實用主義者而不是理論家,我傾向於 c)。造成這種情況的另一個原因是,一項服務基於帳戶授予令牌,而另一項服務基於可能跨越多個帳戶的使用者授予令牌。

我知道這肯定是一個常見問題,但我只是不知道如何描述這個問題,以便我可以在搜尋中找到有關它的有用資訊。

我建議兩張桌子。我假設如果您在應用程序需要重定向 URL 時給它一個 realmID,它將破壞您的應用程序,因此您肯定需要將它們放在單獨的列中。

如果您有兩個應用程序使用兩個單獨的表,您可能會在死鎖的道路上為自己省去一些麻煩。您可能還希望對每個應用程序的數據進行不同的處理。例如,您可能需要將redirectURL 保留5 天,將RealmID 保留2 個月。如果您儘早將事情分開,您將為未來的自己省去很多麻煩。

您始終可以為自己創建一個視圖,將兩個表聯合起來,從而為您提供將數據放在一個表中的任何優點,而沒有任何缺點。

引用自:https://dba.stackexchange.com/questions/301237