mysql - 如何对数据库进行天数和时间安排建模?

标签 mysql database-design relational-database

我必须在关系数据库上对以下场景进行建模。

  • 假设您有很多人(比如 10,000 人)。
  • 想象一下,每个人可能会也可能不会在给定一天的时间内提供给定的服务。我们将这些服务称为“接听电话”、“接听电子邮件”和“接听短信”。
  • 我每天有 48 个时间跨度(00:00 - 00:30、00:30 - 01:00、01:00 - 01:30 等)
  • 我必须安排 7 个工作日(1 到 7)
  • 每项服务都可以与另一项服务重叠。

我目前正在考虑这样的结构:

id | user_id | day | t00 | t05 | t10 | [... more timespans ...] | service_type
x    001       1     1     1     0     ...                        'answer_phone'
y    001       1     1     1     1     ...                        'answer_email'
z    002       1     0     0     1     ...                        'answer_phone'

等等。关于 t* 列:

  • 每个 t* 列都是一个 bool 值
  • t00 表示“服务开放时间为 00:00 至 00:29”
  • t05 表示“服务开放时间为 00:30 至 00:59”
  • t10 表示“服务开放时间为 01:00 至 01:29”

等等。所以,在“x”行我已经建模了

user 001 will answer phone between 00:00 and 00:59, while answering emails from 00:00 to 01:29 on Monday.

经过思考一段时间,这种方法似乎足够简单,但我担心在处理数千个用户时会遇到性能和磁盘空间问题。

事实上,对于 10k 用户,我将拥有 (10k * how_many_services * 7days) 行,这意味着 210.000 条记录。没那么多,但用户可能会增长,或者可能会添加新服务。

您能提出更好的方法吗?

最佳答案

这是一个糟糕的设计。它根本没有标准化。

我想用户和他们的事件计划之间存在一对多的关系。我会这样建模。

如果您不知道范式是什么以及它们为什么重要,那么您就不应该进行关系建模。找一个理解它的人来帮助你。

关于mysql - 如何对数据库进行天数和时间安排建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22049999/

相关文章:

php - 如何通过foreach循环进行更新

mysql - 仅使用一张表来存储多种类型的关系,是否高效?

sql - 数据更新审批的DB设计

database-design - 如何处理删除异常?

database - 计算每天、上周和上个月的访问者点击次数

java - 使用 Criteria api 查找半径内的坐标

java - 提供 `EntityManagerFactory` 会解决 `Unable to retrieve EntityManagerFactory for unitName xyz`

mysql - 如何高效地存储位置和路径并找出最短的旅行路线

mysql - 我应该如何构建我的数据库以停止拥有这么多表?

mysql - 在 MySQL 行的 100 列中选择至少 6 个值