我設計一個數據庫,想知道存儲的最佳方式是:我有一個user
表,讓我們說,它可以有100個項目槽中我應該使用多個字段還是JSON?
,我存儲的ID。 我應該使用JSON({slot1:123232,slot20:123123123,slot82:23123}
)還是創建100個字段(slot1,slot2,slotn)?
謝謝。
我設計一個數據庫,想知道存儲的最佳方式是:我有一個user
表,讓我們說,它可以有100個項目槽中我應該使用多個字段還是JSON?
,我存儲的ID。 我應該使用JSON({slot1:123232,slot20:123123123,slot82:23123}
)還是創建100個字段(slot1,slot2,slotn)?
謝謝。
第三替代方案中,創建另一個表爲槽,並且具有用戶和狹槽之間的一對多的關係。您的業務邏輯將強制執行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的用戶中的所有用戶
使用數據庫設計規範化,您不應該擁有多值屬性。
你可能想要這個。
Users
=====
UserId
UserSlots
=========
UserId
SlotId
Value
Slots
=====
SlotId
Value
您不應創建100個字段。
創建一個帶有兩個字段的表和ID和您的「JSON數據」,您可以根據大小將其存儲在字符串或其他字段類型中。
你可以像其他人建議的那樣標準化它,這樣可以增加保存和檢索時間。
我不同意它會增加檢索時間。現在,如果他想要用戶上的任何插槽數據,他必須獲取用戶上的所有插槽數據,而不是在他的SQL查詢中有選擇性。更何況他還必須解析JSON。而增加的保存時間很可能不是關鍵的。 – Matt 2009-10-11 20:06:24
我的理解是他需要找回JSON結果。如果這是以正常形式存儲的,他將不得不讀取100行。如果它以字符串形式存儲,他將不得不讀取一行。 – 2009-10-11 21:16:20