MySQL:嵌入式JSON与表格

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

示例:一个视频记录具有许多Shoot_Location.这些位置很可能永远不会重复. 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中可用吗?)
>为数据创建一个单独的表.
>还有什么?

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

摘要

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

最佳答案
标准化数据库的原因之一是减少冗余(您的“可重复块”)

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

好的经验法则:

>结构化数据-放在表和列中
>可能属于查询条件的数据-放在表和列中
>您永远不会查询的非结构化数据-放入BLOB,XML或JSON字段中

如有疑问,请使用表和列.您最初可能需要花费一些额外的时间,但是您永远不会后悔.人们一次又一次地为JSON字段(或XML)感到遗憾.我是否再次提到“”?

转载注明原文:MySQL:嵌入式JSON与表格 - 代码日志