我有一个表tablet
,其中包含period_id
列。 tablet
表与period
表具有多对一关系,period
表与sub_period
表具有一对多关系。我需要能够在sub_period
中指定单个tablet
条目,其选择受period
条目的限制,但由于sub_period
仅取决于{ {1}},我不能。我该如何塑造这个?
在我的模型中,每个period
行应该有一个tablet
条目和一个period
条目。 sub_period
和period
之间的关系应为sub_period
(一个时段可能有多个子时段,但每个子时段只能属于一个时段)。 1:n
我希望能够在sub-period
中选择的tablet
应该受到period
编辑:已经意识到我需要tablet
和period
之间的N:1关系:许多平板电脑可能与同一时期有关。
答案 0 :(得分:2)
在has_tablet ENUM('1')
中创建可为空的列sub_period
,并在UNIQUE
上创建sub_period (period, has_tablet)
约束。
has_tablet
只能接受值1
或NULL
,这意味着您可以将每个时段的一个季节恰好设置为“拥有平板电脑”。由于period
到tablet
是一对一的,因此这也唯一地标识了tablet
。
使用此解决方案可能无法在任何时间段内设置任何平板电脑。如果这是一个问题,请将period
添加到tablet
并使tablet (period, sub_period)
引用sub_period (period, sub_period)
。
这是非规范化但它永远不会导致不一致(因为period
在两个表中都由sub_period
定义。)
<强>更新强>
似乎平板电脑的时期是一对多的。在这种情况下,只需添加make tablet
引用sub_period
而不是period
。 period
关系可以通过简单的连接传递推断。
答案 1 :(得分:0)
然后你有两个选择:
第二个选项是我最喜欢的,只要它是关于非敏感数据(请记住有人总是可以跳过客户端界面),因为它通常会给我更多“运动范围”以及我想要处理问题的方式。当然总有例外......
答案 2 :(得分:0)
当你为你建模时,通常你不会创建1:1关系,当你规范化时你会注意到关系1:1的表你可以将它们匹配到一个表中,这就是我看到它的方式: 如果你有3个关系表
(图中的键是原色键,红色符号是外键)
或者您可以在平板电脑和期间表格之间进行匹配,模型将如下所示
平板电脑吸收期间及其所有属性,但这取决于您,您必须根据自己的需要调整模型。