我必须在关系数据库上对以下场景进行建模。
- 假设您有很多人(比如 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/