我设计一个数据库,想知道存储的最佳方式是:我有一个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