2009-10-11 66 views
0

我設計一個數據庫,想知道存儲的最佳方式是:我有一個user表,讓我們說,它可以有100個項目槽中我應該使用多個字段還是JSON?

,我存儲的ID。 我應該使用JSON({slot1:123232,slot20:123123123,slot82:23123})還是創建100個字段(slot1,slot2,slotn)?

謝謝。

回答

4

第三替代方案中,創建另一個表爲槽,並且具有用戶和狹槽之間的一對多的關係。您的業​​務邏輯將強制執行100個插槽的限制。

我建議不要在數據庫中執行嵌入式JSON。我不確定你正在使用哪個數據庫,但是如果不提取並解析所有100條記錄,查詢給定用戶的實際槽數據可能會非常困難。

要創建一個一對多的關係,你需要第二臺現在

Slots 
    id (primary key) 
    user_id (mapping to user table) 
    item_id (your slot # you want to store) 

,你可以做有用的SQL查詢,如

SELECT * FROM Users,Slots WHERE Slots.user_id = Users.id AND Slots.item_id = 12345 

這會給你一個列表所有擁有插槽項目#12345的用戶中的所有用戶

1

使用數據庫設計規範化,您不應該擁有多值屬性。

你可能想要這個。

Users 
===== 
UserId 


UserSlots 
========= 
UserId 
SlotId 
Value 

Slots 
===== 
SlotId 
Value 
0

您不應創建100個字段。

創建一個帶有兩個字段的表和ID和您的「JSON數據」,您可以根據大小將其存儲在字符串或其他字段類型中。

你可以像其他人建議的那樣標準化它,這樣可以增加保存和檢索時間。

+0

我不同意它會增加檢索時間。現在,如果他想要用戶上的任何插槽數據,他必須獲取用戶上的所有插槽數據,而不是在他的SQL查詢中有選擇性。更何況他還必須解析JSON。而增加的保存時間很可能不是關鍵的。 – Matt 2009-10-11 20:06:24

+0

我的理解是他需要找回JSON結果。如果這是以正常形式存儲的,他將不得不讀取100行。如果它以字符串形式存儲,他將不得不讀取一行。 – 2009-10-11 21:16:20

相關問題