2009-10-11 127 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