0

我这辈子都想不通。起初看起来很简单,现在我盯着它看太久了,我只见树木不见森林。

本质上,我们有日划分,这些是任意的......

ID  Name    Start  End
1   Name1   1300   1400
2   Name2   13:30  19:30
3   Name3   20:00  21:30 

ETC

我们希望能够使用这些天划分的任意组合来配置一周中的天数,因此我们有 WeekConfigurations 表

ID  ConfigurationID  DayOfWeek   DayDivisionID   Order
1   1                1           1               1
2   1                1           2               2
3   1                2           2               1
4   1                2           3               2
5   2                1           1               1
6   2                3           2               1
7   2                3           3               1

现在我们希望其他实体(Person、Office 等)分配给他们特定的周配置。这就是我要摆脱困境的地方。我要分配的 configurationID 不是主键,因此我无法强制实体和配置之间的引用完整性。

谁能指出我正确的方向?关于 WeekConfiguration 表的某些东西对我来说很有趣,但我就是看不到它。

PS:对不起,我有一个很好的图表来说明,但我是新手,无法添加

4

2 回答 2

1

在逻辑层面,你有一个“配置”和该配置下的一组“配置项”。因此,不要只使用一个配置表,而是使用两个:

在此处输入图像描述

在这个设计中,ConfigurationId是(表的)主键Configuration,因此您可以直接将其用作外键的父端点。

ConfigurationItemPK 确保每个配置最多可以在一周的一天中使用单日划分,并且备用键确保U1它是明确排序的(在一周和配置的同一天内)。

我还选择避免在ConfigurationItem. 如有必要,您可以轻松添加它(并使现有的 PK 替代) - 例如,如果您有其他未提及的 FK 或使用与复合 PK 不兼容的 ORM。

于 2012-06-20T20:00:24.077 回答
0

是的。 WeekConfiguration应该分成两个表。

要强制执行参照完整性,您需要一个表,其中每周配置恰好有一条记录(和一个 ID);这个表应该有你调用的列,ConfigurationID也许还有某种描述。

另一个表(我们可以称它为`WeekConfigurationDetail)应该存储详细记录,即组成周配置的日划分。虽然这些列与您现有的表相似,但它的主键(ConfigurationID再次)本身就是主WeekConfiguration表的外键。同样,任何其他表(实体)都可以对外引用该表。

即使您在WeekConfiguration表中只有一列,一个无意义的 ID,您仍然需要该表来确保引用完整性。

这种数据库设计模式称为主从设计模式,也称为父子模式。

于 2012-06-20T19:49:09.970 回答