2017-10-14 137 views
0

我想为日历应用程序设置PostgreSQL数据库,并想知道设置其中一个表的首选方式是什么。数据库表设计/设置

如果我想必须有多个用户,将设置的最佳方式表:

用户名|开始时间|结束时间|活动|

或者这将是更好的事:

用户ID |活动| 8am |上午8:30 |上午9点| ... | 12am | ... |上午7:30 |

时间粒度可能是15分钟或5分钟,如果这将是更好的选择。

第一种方式可能会更干净,但理想情况下我不想让事情重叠,但第二种方式可能更难以使用?

+1

第一种选择更好。但是,也许你应该实施第二种选择,以便了解为什么这是一个糟糕的设计。所以...如果你真的想要制作一个工作的应用程序,那就去#1。如果你想学习一个负面的教训,去#2。祝你好运。 –

+0

*“理想情况下,我不想让事情重叠......”*要做到这一点,第一种方法,你可能需要实现StartTime,EndTime作为[范围数据类型](https://www.postgresql .org/docs/current/static/rangetypes.html),并使用排除约束(相同的链接)来保证没有重叠。您可能也需要btree_gist扩展名(同一链接)。 –

回答

1

你的第一个例子更好。但是,至少有3张桌子。

  1. 用户 - 您定义它。
  2. 时刻表:RowID |用户ID |开始时间(日期时间)|结束时间(日期时间)|活动ID
  3. 活动 - 您可以定义活动详细信息。