如何对日程进行建模并保持良好的约束条件?

Rub*_*uck 3 normalization database-design date

我有一些数据很难建模。特别是,我不确定如何确保我拥有唯一的数据。这是我将团队分配到商店的时间表。一个团队将连续两天被安排在同一家商店,但我必须确保在给定的时间段(或“周期”)内安排他们不超过 2 天。

数据的电子表格表示如下所示。

Cycle Team    Store   Date
1     1       1   1-Dec
1     1       1   2-Dec
1     1       2   3-Dec
1     1       2   4-Dec
1     1       3   8-Dec
1     1       3   9-Dec
1     1       4   10-Dec
1     1       4   11-Dec
1     2       10  1-Dec
1     2       10  2-Dec
1     2       11  3-Dec
1     2       11  4-Dec
1     2       12  8-Dec
1     2       12  9-Dec
1     2       13  10-Dec
1     2       13  11-Dec
Run Code Online (Sandbox Code Playgroud)

我已经有了一个运行良好的团队/商店交叉引用,但达到这种粒度级别是新的。如果我可以在 Team/Store/Date 上放置一个复合主键会很容易,但我显然不能这样做,或者我只能存储两个预定日期中的一个。

迄今为止,我已经考虑使用具有一对多关系的日期表,从 Team/Store 到现在,但这似乎并没有解决唯一性问题,并增加了一些愚蠢的开销。

有没有人对如何建模有任何建议?

该标签似乎不合适,因为这确实是我问的一个抽象设计问题,但我使用的是 SQL Server 2008。

ype*_*eᵀᴹ 6

我认为这可以通过一个额外的列(比如Day)来完成,该列只允许保存 2 个可能的值(1 和 2)。

假设一个团队不能在同一日期在 2 个或更多商店中,那么您可以在 上有一个UNIQUE限制(Team, Date),另一个在 上(Cycle, Team, Store, Day)

约束条件是:

UNIQUE CONSTRAINT uq_1
  (Team, Date),
UNIQUE CONSTRAINT uq_2
  (Cycle, Team, Store, Day),
CHECK CONSTRAINT ck_max_2_days_per_team_store_cycle
  (Day in (1,2))
Run Code Online (Sandbox Code Playgroud)

和数据:

Cycle Team Store Date   Day
1     1     1    1-Dec   1
1     1     1    2-Dec   2
1     1     2    3-Dec   1
1     1     2    4-Dec   2
1     1     3    8-Dec   1
1     1     3    9-Dec   2
1     1     4   10-Dec   1
1     1     4   11-Dec   2
1     2    10    1-Dec   1
1     2    10    2-Dec   2
1     2    11    3-Dec   1
1     2    11    4-Dec   2
1     2    12    8-Dec   1
1     2    12    9-Dec   2
1     2    13   10-Dec   1
1     2    13   11-Dec   2
Run Code Online (Sandbox Code Playgroud)