2014-01-21 31 views
0

我有一個簡單的預訂場景,其中用戶可以預訂其他用戶的預定位置。我這樣做的方式是,我使用postgres將時隙存儲爲字符串數組。典型的陣列表示類似於[「晚上10點」,「晚上10點30分」]。但是,由於不同的用戶在不同的時區,所以我使用客戶端來檢測時區並在各自的時區顯示插槽。我的問題是,這足以存儲時隙並將它們轉換爲不同的時區,或者我需要存儲確切的時間戳嗎?ruby​​中的時區

即時通訊使用紅寶石和DB

framewokr和Postgres
+0

由於您將時間數據用作'array'中的'string's,因此您無法在數據庫中使用'datetime'數據類型的好處。在這種情況下,我不清楚你的問題是關於什麼的? – scaryguy

+0

我只對不同時區的實際時間轉換感興趣,但是我想知道的是,具有日期信息並且是否會影響轉換的準確性? –

回答

2

我存儲的時隙作爲字符串數組軌使用的是Postgres

不要。請不要。

如果它們是具體的時間戳(日期+時間),將它們存儲爲timestamptz,這樣它們就是時區無關的。您可以使用AT TIME ZONE運營商在本地時間用戶獲取它們,或者將它們轉換爲客戶端。

如果它們只是時間,請使用time數據類型,並將它們存儲爲UTC時間,使用AT TIME ZONE運算符適當地轉換本地時間/從本地時間進行轉換,或進行客戶端轉換。

如果可能,將它們存儲在規範化表格中。如果出於某種原因(說服我)不能這麼做(說服我),至少應該使用適當數據類型的PostgreSQL數組,而不是一個字符串數組 - 或者更糟的是,因爲它看起來像您可能正在做的事情,Ruby的字符串表示形式字符串數組。

這是最近在dba.stackexchange.com上討論的一個問題的變體,討論了whether native database types or a comma separated list would be better。簡短的版本:除非你有一個真正的非常好的理由否則做一個數據庫友好的方式。