JSON 对象id为主键架构设计
JSON object with id as primary key schema design
我想使用 ID 作为 JSON 对象中的主键。这样列表中的所有用户都是唯一的。
像这样:
{
"user": [{
"id": 1,
"name": "bob"
}]
}
在应用程序中,我必须在列表的所有元素中搜索 id 'user'。
但我也可以使用 ID 作为索引,以便更轻松地访问特定用户。
像这样:
{
"user": {
"1": {
"name": "bob"
}
}
}
在应用程序中,我现在只需编写 user["3"]
即可获得正确的用户。
我应该用什么?第二种选择有什么缺点吗?我确定有最佳实践。
这取决于您希望对象采用何种格式、您希望对对象进行多少处理以及您拥有多少数据。
在处理网络数据时,您经常会看到第一种格式。如果有很多数据,那么您将需要遍历所有记录以找到匹配的 id,因为您的数据是一个数组。通常该查询会在您的较低级别数据集上强制执行,因此它可能已经被索引(例如,如果它是一个数据库),所以这可能不是问题。这种格式干净且易于绑定。
当您需要提高查找效率时,您的第二个选项最有效,因为您有一个包含键值对的字典,可以显着加快大型数据集中的查找速度。并非所有库都支持放置数字键(即使您将其强制为字符串)。不过,您可以在您的 Id 前面加上一个 alpha 值,然后您可以在进行查找时添加前缀。我在此示例中使用了 k,但您可以选择对您的数据有意义的前缀。在数据库中将对象存储为 json 二进制数据类型时,我使用这种格式。
{
"user": {
"k1": {
"name": "bob"
}
}
}
我想使用 ID 作为 JSON 对象中的主键。这样列表中的所有用户都是唯一的。
像这样:
{
"user": [{
"id": 1,
"name": "bob"
}]
}
在应用程序中,我必须在列表的所有元素中搜索 id 'user'。
但我也可以使用 ID 作为索引,以便更轻松地访问特定用户。 像这样:
{
"user": {
"1": {
"name": "bob"
}
}
}
在应用程序中,我现在只需编写 user["3"]
即可获得正确的用户。
我应该用什么?第二种选择有什么缺点吗?我确定有最佳实践。
这取决于您希望对象采用何种格式、您希望对对象进行多少处理以及您拥有多少数据。
在处理网络数据时,您经常会看到第一种格式。如果有很多数据,那么您将需要遍历所有记录以找到匹配的 id,因为您的数据是一个数组。通常该查询会在您的较低级别数据集上强制执行,因此它可能已经被索引(例如,如果它是一个数据库),所以这可能不是问题。这种格式干净且易于绑定。
当您需要提高查找效率时,您的第二个选项最有效,因为您有一个包含键值对的字典,可以显着加快大型数据集中的查找速度。并非所有库都支持放置数字键(即使您将其强制为字符串)。不过,您可以在您的 Id 前面加上一个 alpha 值,然后您可以在进行查找时添加前缀。我在此示例中使用了 k,但您可以选择对您的数据有意义的前缀。在数据库中将对象存储为 json 二进制数据类型时,我使用这种格式。
{
"user": {
"k1": {
"name": "bob"
}
}
}