gpt4 book ai didi

MySQL:嵌入式 JSON 与表

转载 作者:可可西里 更新时间:2023-11-01 06:32:24 28 4
gpt4 key购买 nike

我正在为一个视频制作项目管理应用程序设计数据库架构,并努力解决如何保留一些嵌入式但不可重复的数据的问题。在我参加的几门 CS 类(class)中,规范化关系数据库的一部分是识别可重复的 block 并将它们封装到自己的表中。如果我有一个嵌入/嵌套数据 block ,我知道它可能对记录是唯一的,该怎么办?

示例: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"
...
}
}
],
...
}
}

选项...

  1. shoot_locations 存储在 JSON 字段中(在 MySQL 5.7.8 中可用?)
  2. 为数据创建一个单独的表。
  3. 还有别的吗?

我觉得我应该将嵌入式数据拆分到它自己的表中,并为非关键元数据保存 JSON。

总结

存储非重复嵌入数据的最佳选择是什么?

最佳答案

规范化数据库的原因之一是减少冗余(您的“可重复 block ”)

另一个原因是允许“向后”查询。如果你想知道哪个视频是在“15 Pike Place”拍摄的,你的 JSON 解决方案将失败(你将不得不求助于顺序读取,解码 JSON,这违背了 RDBMS 的目的)

好的经验法则:

  • 结构化数据 - 放入表格和列中
  • 可能是查询条件的一部分的数据 - 放在表和列中
  • 您知道永远不会查询的非结构化数据 - 放入 BLOB、XML 或 JSON 字段

如果有疑问,使用表和列。最初您可能需要多花一些时间,但您永远不会后悔。人们一次又一次地后悔选择 JSON 字段(或 XML,就此而言)。我有提到“再次”吗?

关于MySQL:嵌入式 JSON 与表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31972056/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com