gpt4 book ai didi

sql - SQL DB 中调度应用程序的表结构

转载 作者:行者123 更新时间:2023-12-04 18:30:29 26 4
gpt4 key购买 nike

我正在开发一个数据库来保存随叫随到时间表的信息。目前我有一个看起来像这样的结构:

Table - Person: (key)ID, LName, FName, Phone, Email
Table - PersonTeam: (from Person)ID, (from Team)ID
Table - Team: (key)ID, TeamName
Table - Calendar: (key dateTime)dt, year, month, day, etc...
Table - Schedule: (from Calendar)dt, (id of Person)OnCall_NY, (id of Person)OnCall_MA, (id of Person)OnCall_CA

我的问题是:随着 附表 表,我应该保持结构不变,其中 dt 是唯一键,还是应该重新排列它以便 dt 是非唯一的,并且表格如下所示:
Table - Schedule: (from Calendar)dt, (from Team)ID, (from Person)ID

并且每天有多个条目, 仅使用是否有意义:
Table - Schedule: (from Calendar)dt, (from PersonTeam)KeyID - [make a key ID on each of the person/team pairings]

一个团队总是有人随叫随到,但一个人一次可以为多个团队随叫随到(如果他们在多个团队中)。

如果完全不同的设置会更好地工作,也请告诉我!

谢谢你的帮助!如果我的问题不清楚,我深表歉意。我学得很快,但对于每天使用 SQL 仍然很陌生,所以我想确保我在学习时使用最佳实践,这样我就不会养成坏习惯。

最佳答案

  • 当前版本,每个团队一栏,可能不是一个好主意。由于您将团队表示为表格(而不是枚举或等效项),这意味着您希望随着时间的推移添加/删除团队。这将迫使您向表中添加/删除列,这总是比添加/删除几行要大得多的任务。
  • 第二个选项是此类问题的常用解决方案。一个安全的选择。您始终可以从 Schedule(teamID, personID) 到 PersonTeam 定义一个额外的外键约束,以确保您不会错误地将调度职责分配给不属于团队的人员。
  • 第 3 个选项几乎等同于第 2 个选项,只是您将 PersonTeam 的复合自然键交换为代理简单键。由于所述复合键的两个组件已经是代理,因此添加这个额外的组件没有任何优势(在不变性等方面)。此外,它会将大多数数据库管理器/ORM 可以很好地处理的非常简单的 N-M 关系 (PersonTeam) 转变为需要自行管理的更复杂的对象。

  • 通过奥卡姆 Razor ,我将取消额外的代理键并使用您的第二个选项。

    关于sql - SQL DB 中调度应用程序的表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220386/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com