【发布时间】:2023-03-07 09:50:01
【问题描述】:
我正在为视频制作项目管理应用程序设计数据库架构,并且正在努力解决如何保留一些嵌入式但不可重复的数据。在我参加的几门 CS 课程中,规范化关系数据库的一部分是识别可重复的块并将它们封装到自己的表中。如果我知道某个嵌入/嵌套数据块可能对记录是唯一的,该怎么办?
示例: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 中可用?) - 为数据创建一个单独的表。
- 还有别的吗?
我觉得我应该将嵌入数据拆分到自己的表中,并为非关键元数据保存 JSON。
总结
存储非重复嵌入数据的最佳选择是什么?
【问题讨论】:
-
很少,只有当它是回头客时。大多数视频拍摄都在独特的位置。
-
Hazzit 的正确答案如下。不要将位置视为标题-细节关系中的标题表,它只是视频的 1..n 属性。如果您想查询位置,并且因为您将其存储在数据库中,所以将它们放在位置表中。
标签: mysql database-design database-schema