【问题标题】:How to deal with a "optional" circular reference如何处理“可选”循环引用
【发布时间】:2018-09-14 13:09:28
【问题描述】:

我在循环引用方面遇到问题。我无法找到好的设计解决方案。

我们有一个遗留的调度系统。

用户

  • 用户ID

时隙(可用性)

  • 时隙ID
  • start_hour
  • finish_hour
  • FK_userID

约会

  • timeSlotID_FK
  • 详情
  • start_hour
  • finish_hour

这样我们就有了一个链条 用户 - (1,n) -> 可用性 - (1, n) -> 约会

现在我想做的是在一个特殊的时间段内安排约会。 (用户出现在他不应该有空并想要预约时。

这样我需要缩短可用性。

用户 -> 约会

但如果我添加一个新字段 UserFK,我觉得我会创建一个循环引用。

【问题讨论】:

    标签: database-design


    【解决方案1】:

    根据您的问题,以下是我对数据库设计的看法。

    • 取消 FK_UserID 与时隙的关联。使它们成为独立的实体。你 将具有将用户与约会相关联的灵活性。你 可以有一个单独的表User_Timeslot,如果你想维护 一般用户的可用性。它可以用来检查 可用性,不应该影响,如果用户来使 约会。

    • 现在,appointment 将成为一个桥接表,用于映射用户、时隙 和相应的任命。您还可以有一个标志 IsUserAdhocAppointment,它将告诉用户是否出现在他的时间段之外(基于User_Timeslot 表)。约会是针对此用户在此 start_hour 到 end_hour 的,属于此时间段。

    【讨论】:

    • 重要的是说一个时间段可能有多个约会。它更像是可用性。我试图找到一个合适的词。我有一个从 10 点到 11 点的时间段,我可能有 10:00-10:15 和 10:30-11:00 作为约会。但这是有道理的,我不一定需要知道它是哪个时间段的信息......
    • @Luc,现在我理解得更好了。我已经更新了答案
    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 2019-02-26
    • 2015-03-02
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多