MySQL:嵌入式 JSON 与 table
MySQL: Embedded JSON vs table
我正在为一个视频制作项目管理应用程序设计数据库架构,并且正在努力解决如何保留一些嵌入式但不是重复table 数据的问题。在我参加的少数 CS 课程中,规范化关系数据库的一部分是识别 repeatable 块并将它们封装到自己的 table 中。如果我有一个 embedded/nested 数据块,我知道该数据块可能是唯一的记录怎么办?
示例:一条 video
条记录有很多条 shoot_locations
。这些位置很可能永远不会重复。 shoot_locations
也可以包含多个shoot_times
。在 JSON 中表示,可能如下所示:
{
video: {
shoot_locations: [
{
name: "Bob's Pony Shack",
address: "99 Horseman Street, Anywhere, US 12345",
shoot_times: {
shoot_at: "2015-08-15 21:00:00",
...
}
},
{
name: "Jerry's Tackle",
address: "15 Pike Place, Anywhere, US 12345",
shoot_times: {
shoot_at: "2015-08-16 21:00:00"
...
}
}
],
...
}
}
选项...
- 将
shoot_locations
存储在 JSON 字段中(在 MySQL 5.7.8 中可用?)
- 为数据创建一个单独的 table。
- 还有别的吗?
我觉得我应该将嵌入式数据拆分成它自己的 table 并保存 JSON 用于非关键元数据。
总结
存储非重复嵌入数据的最佳选择是什么?
规范化数据库的原因之一是减少冗余(您的"repeatable blocks")
另一个原因是允许 "backwards" 查询。如果你想知道哪个视频是在“15 Pike Place”拍摄的,你的 JSON 解决方案将失败(你将不得不求助于顺序读取,解码 JSON 这违背了 RDBMS 的目的)
好的经验法则:
- 结构化数据 - 放入表和列中
- 可能属于查询条件的数据 - 放入表和列中
- 您知道永远不会查询的非结构化数据 - 放入 BLOB、XML 或 JSON 字段
如有疑问,使用表和列。最初您可能需要多花一些时间,但您永远不会后悔。人们一次又一次地后悔选择 JSON 个字段(或 XML,就此而言)。我有提到 "again" 吗?
我正在为一个视频制作项目管理应用程序设计数据库架构,并且正在努力解决如何保留一些嵌入式但不是重复table 数据的问题。在我参加的少数 CS 课程中,规范化关系数据库的一部分是识别 repeatable 块并将它们封装到自己的 table 中。如果我有一个 embedded/nested 数据块,我知道该数据块可能是唯一的记录怎么办?
示例:一条 video
条记录有很多条 shoot_locations
。这些位置很可能永远不会重复。 shoot_locations
也可以包含多个shoot_times
。在 JSON 中表示,可能如下所示:
{
video: {
shoot_locations: [
{
name: "Bob's Pony Shack",
address: "99 Horseman Street, Anywhere, US 12345",
shoot_times: {
shoot_at: "2015-08-15 21:00:00",
...
}
},
{
name: "Jerry's Tackle",
address: "15 Pike Place, Anywhere, US 12345",
shoot_times: {
shoot_at: "2015-08-16 21:00:00"
...
}
}
],
...
}
}
选项...
- 将
shoot_locations
存储在 JSON 字段中(在 MySQL 5.7.8 中可用?) - 为数据创建一个单独的 table。
- 还有别的吗?
我觉得我应该将嵌入式数据拆分成它自己的 table 并保存 JSON 用于非关键元数据。
总结
存储非重复嵌入数据的最佳选择是什么?
规范化数据库的原因之一是减少冗余(您的"repeatable blocks")
另一个原因是允许 "backwards" 查询。如果你想知道哪个视频是在“15 Pike Place”拍摄的,你的 JSON 解决方案将失败(你将不得不求助于顺序读取,解码 JSON 这违背了 RDBMS 的目的)
好的经验法则:
- 结构化数据 - 放入表和列中
- 可能属于查询条件的数据 - 放入表和列中
- 您知道永远不会查询的非结构化数据 - 放入 BLOB、XML 或 JSON 字段
如有疑问,使用表和列。最初您可能需要多花一些时间,但您永远不会后悔。人们一次又一次地后悔选择 JSON 个字段(或 XML,就此而言)。我有提到 "again" 吗?